@khodos_dmitry

Почему в регулярке не работает утверждение?

#(<img.+>\s*)(?!</a>)#Uu
В этой регулярке нужно выбрать тег img после которого не следует тег </a>. Она находи все теги img, то есть работает неправильно.
Если искать тег img после которого есть </a>, то такая похожая регулярка работает:
#(<img.+>\s*)(?=</a>)#Uu
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
lidacriss
@lidacriss
wtf
#(<img.+>\s*)(?!</a>)#Uu
В этой регулярке нужно выбрать тег img после которого не следует тег </a>. Она находи все теги img, то есть работает неправильно.


Немного не верное "утверждение", точнее ваше утверждение (смотрящее) вперед работает только для \s* а оно у вас с квантором * - ноль или много, и получается, что в данном случае срабатывает "ноль" повторений "предыдущего" (\s) и поэтому как бы не срабатывает смотрящее вперед
если вы хотите, чтобы выдергивались все img теги после которых нет </a>, то следует писать как-то так
<img[^<>]*?>(?!<\/a>)

а если переживаете, что там может быть пробельные символы, то как-то так
(<img[^<>]*?>)(?!\s*<\/a>)

https://regex101.com/r/IoAn7q/1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы