/ /単語を含まない文字列パターンを選択するために正規表現を使用する-php、html、regex

regexを使って単語を含まない文字列パターンを選択する - php、html、regex

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ではなく文字列のみであるためです。