/ / używając wyrażenia regularnego, aby wybrać ciąg znaków niezawierający słowa - php, html, regex

za pomocą wyrażeń regularnych wybierz wzór łańcuchowy niezawierający słowa - php, html, regex

jak mogę wybrać z tego ciągu złożonego z 3 znaczników obrazu tych, które nie zawierają?

 id="img_menu":

strunowy:

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

regex zaznacz wszystkie znaczniki:

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

ale nie udało mi się dodać odpowiedniego kodu, aby wybrać 3. obraz! proszę pomóż.

Odpowiedzi:

1 dla odpowiedzi № 1

Działa to dla mnie, chociaż te spojrzenia nie są moją mocną stroną, więc może istnieć bardziej wydajny sposób:

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 />"]

Skrzypce

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));
?>

Wydajność:

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

2 dla odpowiedzi nr 2

Użyj trybu multi-line / not-dot-all w pętli while / global.

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

Możesz to zrobić, ponieważ jest to tylko ciąg znaków, a nie html.