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 № 1Dział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 />"]
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.