3つの画像マークアップで構成されたこの文字列から、含まれていないものをどのように選択できますか?
id="img_menu":
文字列:
<img class="alignnone " blabla />
<img class="dddd " blabla />
<img style="blalbla" id="img_menu"/>
この正規表現はすべてのマークアップを選択します:
/<img*[^>]*[^>]./
しかし、3番目のimgを選択するための適切なコードを追加することができませんでした!助けてください。
回答:
回答№1は1これは私にとってはうまくいきますが、ルックアラウンドは私の長所ではないので、もっと効率的な方法があるかもしれません。
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
while / globalループでmulti-line / not-dot-allモードを使用します。
^(?!.*id="img_menu").*$
これができるのは、HTMLではなく文字列のみであるためです。