PHP Regex, удалить строку из другого, если выражение допустимо - PullRequest
0 голосов
/ 10 февраля 2019

Подобных вопросов много, но я не могу найти точного ответа.И я не знаком с темой Regular Expresion.

PHP7: я хочу проверить, содержит ли $ str HTML-код и его href ссылается на URL: "website.fr" как '<a href="www.website.fr/123/">*****</a>'

Я использовал шаблон <\b[a>]\S*\<\/a>, но не работает.Любая помощь, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

В общем, синтаксический анализ HTML с помощью регулярных выражений - плохая идея (см. этот вопрос ).В PHP вы можете использовать DOMDocument и DOMXPath для поиска элементов с определенными атрибутами в документе HTML.Примерно так, который ищет элемент <a> где-то в HTML, который имеет значение href, содержащее строку 'website.fr/':

$html = '<a href="www.website.fr/123/">*****</a>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
if (count($xpath->query("//a[contains(@href, 'website.fr/')]")))
    echo "found"; 
else
    echo "not found";

Демонстрация на 3v4l.org

0 голосов
/ 10 февраля 2019

Это регулярное выражение ловит элемент a с атрибутом href, который ссылается на website.fr url:

<a.*\shref="([^"]*\.)?website\.fr([.\/][^"]*)?"

Объяснение:

  • <a[^>]*: начало привязки
  • \shref=": ..., за которым следует открытый атрибут href
  • ([^"]*\.)?:URL может начинаться с чего угодно, кроме цитаты и заканчиваться точкой
  • website\.fr: ваш сайт
  • ([.\/][^"]*)?: URLможет заканчиваться косой чертой, за которой следует что угодно, кроме цитаты

Это регулярное выражение может охватывать не все случаи (например, URL, содержащий цитату).Как правило, не рекомендуется анализировать HTML с регулярными выражениями.Лучше использовать синтаксический анализатор XML.

...