(^(^abc))「肯定先読み」とは文字列を消費しないで、後述の文字列を先読みすることです。
先読みした文字列は消費しないので、以下のような動作を実現できます。
(^(^abc))(^[^xyz])<body link="#0000EE" vlink="#0000EE">
body要素のlink属性にマッチさせる表現を考えます。
(link属性, vlink属性 の順番は任意とします。)
<body\s[^>]++link= と記述すると、vlink属性にマッチしてしまう可能性があります。
これはlink属性の手前の空白にマッチさせれば、回避できますね。
が、<body\s[^>]++ を生かしたまま、link属性の前に空白を入れることは出来ません。
そこで、<body の後ろの空白文字は「肯定先読み」によって消費せずにテストし、link= の手前で空白文字を消費させます。
結果的に、\s を二度テストすることになりますが、これで意図通りに動作します。
<div align='center' class='ad'>...</div>
にスタイルシートの display: none を付加する表現を考えます。<div align='center' class='ad'>
1つには、div(\s[^>]++class=$AV(ad))\0 として、一部分をローカル変数に取り込み、置換テキストで変数の値を出力する手が考えられます。
が、変数に取り込んだ文字列をそのまま出力している、という点においては無駄な処理がありますね。
[Patterns] Name = "Kill div ad" Active = TRUE Limit = 128 Match = "<div(^(^\s[^>]++class=$AV(ad)))" Replace = "<div style='display: none'"
このように、肯定先読みで後述の文字列を消費せずにチェックだけ行うと、置換テキストがスッキリします。