|
秀まるおさん今日は、Iranoan です。
> (?<!(0x|[0-9]))([0-9]+)([ulf])(?\2)
これで上手く動作しているのですが、質問があります。
> pattern1 \f pattern2 \f pattern3 \f ...
>
> とやる代わりに、
>
> (pattern1)(pattern2)(pattern3)
>
> ってな具合になります。例えば、
>
> ([a-z])([0-9])
>
> とやると、\1は[a-z]にヒットした部分、\2は[0-9]にヒットした部分って意味
> になります。こっちの新形式の場合は、この\1, \2がそのまま検索対象にも使え
> ることが非常に有益でして、つまり、
>
> ([a-z])\1\1
>
> とすると、a-zの同じ文字が3回連続した場合みたいな表現が可能になります。
ということで、(→http://www.maruo.co.jp/turukame/3/x06178_.html#6183)
「()」を使ったときは、各々の pattern を参照するときは \0 ではなく、\1
から始まるんですよね。
##Perl も $1, \1 で始まるようなので、これはこれで良いと思います。
だとすると、
> (?<!(0x|[0-9]))([0-9]+)([ulf])(?\2)
において、考え方として
・(?<!(0x|[0-9]))([0-9]+)([ulf])(?\3)
~~~~~~\1~~~~~ ^^\2^^ ~~\3~
・(?<!(0x|[0-9]))([0-9]+)([ulf])(?\2)
^^\1^^ ~~\2~
があり、後者になっているのは、前方不一致を使い検索にヒットする (範囲選
択や点滅表示される) 部分が元々ない為、と解釈すればよいのでしょうか?
##他のソフトウェアでどういった師弟を採用しているか不明ですが...。
P.S 前者にして欲しいというわけではなく、
・当初単純に一番外側の「()」で括られた部分を単純に数えていけば良いと
思っていた
・もし Perl や他のソフトウェアと異なっていると良くないと思う
ので、質問させて頂きました。
|
|