як я міг вибрати з цього рядка з 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.