2005年12月12日

(?=regexp) って何?

  
正規表現の (?= )って表現は何を意味するのだろう。
ある文献を読んでいたら、(?= )の表現が出てきた。
僕は、正規表現をバリバリ使うことはないので、今まで、この表現は使ったことがなかった。

で、MSDNで調べてみたら、あれ、リンクをたどっていたら途中から英語の文献になっちゃった。(これはフィードバックしておこう)

話しを元に戻すと、

どうもMSDNの説明を説明読んでも、いまいちよくわからない。
\w+\s+class
\w+\s+(?=class)
との区別って何だろうか?(?= ) としたことで何が変わるんだろうか。

ということで実際に試してみた。
例えば、"public class" という入力文字列に対して、
"\w+\s*class"
という正規表現だと入力文字列全体と一致する。
一方、
"\w+\s+(?=class)"
だと、"public " と一致した。
ああ、なるほど、
「特定の文字列が後続していないとマッチしないのだけれど、マッチする文字列は、(?= ) の部分は含まない」
ということなのか。

ということは、"public" 部分だけを抜き取りたかったら、
"\w+\s+(?=class)"
じゃなくて、
"\w+(?=\s+class)"
にしなくては、いけないんだな。

なるほど、勉強になりました。


 

この記事へのトラックバックURL