Выражение preg_replace не может содержать строку - PullRequest
0 голосов
/ 18 апреля 2020

Быть здесь по стене. Я смотрел на другие посты, где есть негативное предположение, но по какой-то причине я не могу заставить его работать. Возможно, упустил что-то очень простое, но после нескольких часов работы с различными вариантами мне нужна помощь!

Итак, я пытаюсь найти шаблон для preg_replace, который ищет в коде ссылки href, которые игнорируются, содержащие какой-либо домен И также игнорирует любые, которые включают js ссылку, называемую data-fancybox .

. В последующем он должен игнорировать первые 3, которые содержат data-fancybox , а также игнорировать # 4 ссылку youtube . Он должен найти только последние 2.

  1. <a href="https://youtube.com/" data-fancybox>
  2. <a href="https://example.com/" data-fancybox>
  3. <a href="https://vimeo.com/" data-fancybox>
  4. <a href="https://youtube.com/">
  5. <a href="https://example.com/">
  6. <a href="https://vimeo.com/">

Когда я пытаюсь это сделать:

<a href=.*((youtube|data-fancybox)).*>

Он выбирает первые 4 и игнорирует последние два. Но когда я пытаюсь превратить этот негатив, чтобы он выбирал только последние 2, он заканчивает тем, что выбирал их всех:

<a href=.*(?!(youtube|data-fancybox)).*>

Любая помощь приветствуется !!

1 Ответ

0 голосов
/ 18 апреля 2020

Вы должны указать все символы до появления текста, который вас интересует, например, youtube.com. Чтобы обнаружить ссылки, которые не являются youtube.com

$pattern = '/(<a href=\"https:\/\/(?!youtube.com).*)/';
$string[] = '<a href="https://youtube.com/" data-fancybox>';
$string[] = '<a href="https://example.com/" data-fancybox>';
$string[] = '<a href="https://vimeo.com/" data-fancybox>';
$string[] = '<a href="https://youtube.com/">';
$string[] = '<a href="https://example.com/">';
$string[] = '<a href="https://vimeo.com/">';
foreach ($string as $key=>$str)
{
    if (preg_match($pattern, $str, $matches))
        echo "$key valid<BR>";
    else
        echo "$key not valid<BR>";
}

Чтобы обнаружить ссылки, которые не являются data-fancybox

$pattern = '/(.*\" (?!data-fancybox)|.*\">)/';
...