menu
書いてる野郎
orebike@gmail.com
所謂先読み後読みという正規表現は文字そのものではなく「位置」にマッチするための正規表現である。 ただそれ以上でもそれ以下でも無い、ポイントは位置にマッチしているのでマッチ対象に文字は入ってないということになる。つまりこれは正規表現の結果を何にしたいかとかかわってくる。実装されている処理系と組み合わせれば同様の結果を導くことができるためあまり必要になることは無いが、正規表現だけとなると結果の形態が意味をもってくる。
その正規表現でヒットさせる文字列の左側位置にヒットする
このような文字列があり
11111111111111111hoge22222222222222222
このような指定をするならば
/(?=hoge)/
この指定はこの「位置」にヒットしている。hoge にはヒットしていない。
11111111111111111<here>hoge22222222222222222
この場合
/1(?=hoge)/
マッチするのはこの hoge の直前の「1」1個
1111111111111111[1]hoge22222222222222222
「1hoge」ではない。
hoge の直前を取り出したいだけであれば、このようにキャプチャを使えば済む話で、この記述は必要ない。
/(.)hoge/
一般の使用用途であまりこの先読みが出てこないのは処理系と合わせれば特に必要ないからだ。 しかし正規表現の中に組み入れる正規表現となるとその結果が重要になってきてキャプチャではなくヒットさせておくと楽な場合がある。そのようば場合に用いられる。
「先」とか「後」とか関係なく、マッチは今まで通り「左」から順に最大範囲マッチするだけである。なのでこの「先」とか「読み」という呼称はやめたほうがいいと思う。 より右に「先読み」が書いてあったとしても左側よりも先に判定されることはない。 そもそも何を読んでいる?
紛らわしいのでやめたほうがよい