「HTMLに正規表現を使用しないでください」ということは知っていますが、真剣に、htmlパーサー全体をロードすることは常にオプションではありません。
というわけでシナリオはこちら
<script...>
some stuff
</script>
<script...>
var stuff = '<';
anchortext
</script>
これを行う場合:
<script[^>]*?>.*?anchor.*?</script>
最初の script タグから 2 番目のブロックの /script までをキャプチャします。.* を実行する方法はありますか? しかし、を置き換えることによって。次のようなマッチブロックを使用します。
<script[^>]*?>(^</script>)*?anchor.*?</script>
否定的な先読みなどを見ましたが、何かがうまく動作しません。通常は [^>]*? を使用します。ただし、この特定の例では、スクリプトのコンテンツに「<」が含まれており、アンカーテキストに到達する前に一致を停止します。
簡単にするために、[^z]*? のようなものが必要です。ただし、単一の文字または文字範囲の代わりに、文字列に適合するキャプチャ グループが必要です。
.*?(?!z) doesn't have the same effect as [^z]*? as I assumed it would.
これが私が立ち往生している場所です:http://regexr.com?34llp