OK、この正規表現が機能する理由を徹底的に理解しています。私が取り組んでいるテキストはこれです:
<html>
<body>
hello
<img src="withalt" alt="hi"/>asdf
<img src="noalt" />fdsa<a href="asdf">asdf</a>
<img src="withalt2" alt="blah" />
</body>
</html>
次の正規表現を使用すると (php でテストされていますが、すべての perl 正規表現に当てはまると想定しています)、alt タグを含まないすべての img タグが返されます。
/<img(?:(?!alt=).)*?>/
Returns:
<img src="noalt" />
それに基づいて、後方参照を削除するだけで同じものが返されると思います。
/<img(?!alt=).*?>/
Returns:
<img src="withalt" alt="hi"/>
<img src="noalt" />
<img src="withalt2" alt="blah" />
ご覧のとおり、すべてのイメージ タグを返すだけです。さらに混乱させるために、? を削除します。(私が知る限り、単にワイルドカードです) * が最後まで戻った後 >
/<img(?!alt=).*>/
Returns:
<img src="withalt" alt="hi"/>
<img src="noalt" />fdsa<a href="asdf">asdf</a>
<img src="withalt2" alt="blah" />
誰かが私に知らせてくれるか、少なくともここで何が起こっているかについて正しい方向に向けてくれますか?