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

Тема в разделе "Регулярные выражения", создана пользователем Wertos, 17 ноя 2017.

Модераторы: xpert13
  1. Wertos

    Wertos Пьянь местная

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

    aurora2000 Постоялец

    Регистр.:
    24 авг 2014
    Сообщения:
    122
    Симпатии:
    42
    В $s данные
    Код:
    $s = preg_replace("/<a(.*?)href=\"xxxx\">(.*?)<\/a>/is", "", $s);
    
    удалит <a class="zzz" href="xxxx">blablabla<a>
     
  3. romas_s

    romas_s

    Регистр.:
    9 ноя 2012
    Сообщения:
    248
    Симпатии:
    71
  4. zabolots

    zabolots Постоялец

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

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

    zabolots Постоялец

    Регистр.:
    11 сен 2012
    Сообщения:
    56
    Симпатии:
    21
    Если это вопрос, то я не понял – какой именно :)
    Чтобы протокол и доменную зону не перечислять (если одинаково всегда), можете написать паттерн так:
    Код:
    /<a .*href="http:\/\/(xxxx|eee|gggg)\.ru".*>.*<\/a>/is
     
  6. aurora2000

    aurora2000 Постоялец

    Регистр.:
    24 авг 2014
    Сообщения:
    122
    Симпатии:
    42
    можете указать тогда так
    $s = preg_replace("/<a(.*?)href=\"(.*?)(xxxx|eee|gggg)(.*?)\"(.*?)>(.*?)<\/a>/is", "", $s);

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

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    159
    Симпатии:
    36
    Так не работает !
     
  8. aurora2000

    aurora2000 Постоялец

    Регистр.:
    24 авг 2014
    Сообщения:
    122
    Симпатии:
    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);
    
     
  9. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    159
    Симпатии:
    36
    Не в одну строку, они там по странице разбросаны могут быть.