Удалить ссылки по содержанию в href

Wertos

Пьянь местная
Регистрация
13 Апр 2007
Сообщения
178
Реакции
39
Помогите с регуляркой, нужно удалить ссылки вместе содержимым по тому, что находиться в href. Т.е.
<a class="zzz" href="xxxx">blablabla<a>
<a id="rrr" href="gggg">blablabla<a>
<a rel="zzz" href="eee" />labla<a>
Любые ссылки если в href найдено одно из соответствий...
 

aurora2000

Постоялец
Регистрация
24 Авг 2014
Сообщения
120
Реакции
42
В $s данные
Код:
$s = preg_replace("/<a(.*?)href=\"xxxx\">(.*?)<\/a>/is", "", $s);

удалит <a class="zzz" href="xxxx">blablabla<a>
 

zabolots

Постоялец
Регистрация
11 Сен 2012
Сообщения
54
Реакции
22
Нет, нужно вот так:
PHP:
$old = "<a>...</a>"; // здесь ваши ссылки
$new = preg_replace("/<a .*href="(xxxx|eee|gggg)".*>.*<\/a>/is", "", $s);
Только обратите внимание, что у вас ошибка – закрывающий тег должен быть со слешем, тогда будет работать: </a>

В скобках через | перечисляются тексты, наличие которых в анкоре требует удалить ссылку.
 

zabolots

Постоялец
Регистрация
11 Сен 2012
Сообщения
54
Реакции
22
(xxxx|eee|gggg) это часть того что находиться в href, т.е. только имя домена. Например в href="Для просмотра ссылки Войди или Зарегистрируйся", я пишу только xxx
Если это вопрос, то я не понял – какой именно :)
Чтобы протокол и доменную зону не перечислять (если одинаково всегда), можете написать паттерн так:
Код:
/<a .*href="http:\/\/(xxxx|eee|gggg)\.ru".*>.*<\/a>/is
 

aurora2000

Постоялец
Регистрация
24 Авг 2014
Сообщения
120
Реакции
42
(xxxx|eee|gggg) это часть того что находиться в href, т.е. только имя домена. Например в href="Для просмотра ссылки Войди или Зарегистрируйся", я пишу только xxx
<-------------- добавлено через 969 сек. -------------->
Для просмотра ссылки Войди или Зарегистрируйся, из того что в href я знаю только часть текста. Например... есть сайты aaa.ru, aaa.com, aaa.biz, aaa.xxx я указываю только xxx НО это не всё, в ссылке он может быть или с http или c www не важно....

можете указать тогда так
$s = preg_replace("/<a(.*?)href=\"(.*?)(xxxx|eee|gggg)(.*?)\"(.*?)>(.*?)<\/a>/is", "", $s);

будет удалять ссылки по части вхождения
 

aurora2000

Постоялец
Регистрация
24 Авг 2014
Сообщения
120
Реакции
42
Так не работает !

если все в одну строку то проще так
Код:
$s = '<a class="zzz" href="123xxxx234">blablabla</a><a id="rrr" href="http://gggg.com">blablabla</a>test<a rel="zzz" href="https://www.eee.com" />labla</a>';

$s = preg_replace("/<\/a>/i", "</a>\n", $s);
$s = preg_replace("/<a(.*?)href=\"(.*?)(xxx|eee)(.*?)\"(.*?)>(.*?)<\/a>/i", "", $s);
 

Wertos

Пьянь местная
Регистрация
13 Апр 2007
Сообщения
178
Реакции
39
если все в одну строку то проще так
Код:
$s = '<a class="zzz" href="123xxxx234">blablabla</a><a id="rrr" href="http://gggg.com">blablabla</a>test<a rel="zzz" href="https://www.eee.com" />labla</a>';

$s = preg_replace("/<\/a>/i", "</a>\n", $s);
$s = preg_replace("/<a(.*?)href=\"(.*?)(xxx|eee)(.*?)\"(.*?)>(.*?)<\/a>/i", "", $s);
Не в одну строку, они там по странице разбросаны могут быть.
 
Сверху