/ / за допомогою регулярного вибору для вибору рядкового шаблону, що не містить слова - php, html, regex

використовуючи регулярний вираз, щоб вибрати рядок-шаблон, який не містить слова - php, html, regex

як я міг вибрати з цього рядка з 3 розмітки зображення ті, які не містять?

 id="img_menu":

рядок:

 <img class="alignnone " blabla />
<img class="dddd " blabla />
<img  style="blalbla"  id="img_menu"/>

цей регекс виберіть усі розмітки:

    /<img*[^>]*[^>]./

але мені не вдалося додати належного коду, щоб вибрати 3-е зображення! будь ласка, допоможіть.

Відповіді:

1 для відповіді № 1

Це працює для мене, хоча lookarounds не є моєю сильною стороною, тому може бути більш ефективний спосіб зробити це:

JS

var str = "<img class="alignnone " blabla />n
<img class="dddd " blabla />n
<img  style="blalbla"  id="img_menu"/>";
str.match(/(?!<img.+?id="img_menu".*?/>)<img.+?/>/g);
//["<img class="alignnone " blabla />", "<img class="dddd " blabla />"]

Скрипка

PHP

<?php
$code = "<img class="alignnone " blabla />
<img class="dddd " blabla />
<img  style="blalbla"  id="img_menu"/>";
$newStr = preg_replace("/(?!<img.+?id="img_menu".*?/>)<img.+?/>/","[matched_img]",$code);
var_dump(htmlentities($newStr));
?>

Вихід:

string(92) "[matched_img] [matched_img] <img style="blalbla" id="img_menu"/>"

2 для відповіді № 2

Використовуйте багаторядковий / не точковий режим у певному / глобальному циклі.

 ^(?!.*id="img_menu").*$

Ви можете зробити це, тому що це лише рядок, а не html.