|
FindRegularでの「^」ですが、すみませんがこれは改行にはマッチしないです。
「^」は、普通の検索では行頭にヒットするってことになってますが、これは
「改行にヒットする」って意味ではなくて、あくまで検索対象文字列の先頭に
ヒットするって意味になります。
なので例えば
##pos = dllfunc("FindReguar", "(?<=^)0", "aiu\n0";
とかでもうまくヒットしないです。
ならば、
##pos = dllfunc("FindReguar", "(?<=(^|\\n))0", "au\n0";
とすればヒットするかというと、とりあえずヒットするケースもあるんですが、
実は「(?<=...)」の中には改行文字を含めることが出来ないって制限がありまし
て、うまくいかないことが多いです。
なのでこの作戦も、すみませんが使えないです。
やるとしたら、「ヒットした扱いにするタグ指定」を使う作戦があります。
##pos = dllfunc("FindRegular"
,"(([^\\\\]|^)(\\\\\\\\)*)(\\$[0-9]+)(?\\2)"
,"aiu\n$0");
とするとうまくヒットします。
そういう作戦でお願いするしか無いです。
まとめると…
− 「^」は、検索対象文字列の先頭にヒットするのみで、
検索対象文字列の途中にある改行に長さゼロでヒットする
パターンのつもりでは使えない。
− (?<=....)の中に改行文字は入れられない。入れたい場合は
(?<=pattern1)(pattern2)のような形にして
(pattern1)(pattern2)(?\2) のように書き換える。
でお願いします。
|
|