Я хотел бы сделать следующее, желательно с PHP:
Удалите целое слово, если часть слова содержит определенную строку. Это должно быть нечувствительным к регистру и работать несколько раз, например, на большом тексте.
Псевдо-код:
match = "www." lots_of_random_text = "... hello and welcome to www.stackoverflow.com! blah blah" result = magic_function(lots_of_random_text, "www.")
результат должен теперь равняться: "... hello and welcome to blah blah"
.
Как я могу сделать это наиболее эффективным способом?
Кажется, что регулярное выражение подходит для этой задачи. Для начала ознакомьтесь с документами для preg_match или основными документами PCRE для полного обзора.
php> $text="hello and welcome to www.stackoverflow.com snout pickle and while you're here, check out a unicorn at www.unicornmagicfairywonderland.net!"; php> $cleaned_text=preg_replace('#www\.[\w\d]+\.(com|net|org)#','',$text); php> echo $cleaned_text; hello and welcome to snout pickle and while you're here, check out a unicorn at !
Ключевой частью является «#www. [\ W \ d] +. (Com | net | org) # '. Это означает соответствие любой строке, начинающейся с http://www., Имеет любое количество слов или цифр слова и заканчивается на .com, .net или .org.
Если вы пытаетесь заменить какой-либо URL-адрес, выражение будет намного сложнее, чем это, поэтому следует предупредить, что это неполное. Вы хотите убедиться, что это соответствует словам, которые начинаются с http: //, не имеют www. или иметь другой субдомен, и заканчивать другими доменами, такими как .co.uk или .edu, правильно?
Регулярные выражения в целом, сложные и жесткие, чтобы получить право. Вы можете найти http://www.regular-expressions.info полезным.