タグ

ブックマーク / hdmr.org (1)

  • 含まない正規表現の罠 – 日記帳だ! with Tux on Libserver

    ある文字列を含まない正規表現について調べるとPerlでは(?:(?!foo).)+とある。 fooの部分には任意のパターンが来ることができる。 時々このパターンは便利で、例えばJR○○駅のうち、JR難波駅以外というのは、こういうパターンで書ける。 JR(?:(?!難波).)+?駅 まぁこんな調子で抜き出すことができる。 まぁ便利な正規表現です。 ところが調べていたらこんな欠陥が浮かび上がってきた。 というのもgankaiという文字列を含まないパターンを作ってこう調べた。 print join(',' , 'gankai'=~m/(?:(?!gankai).)+/g),"\n"; するとankaiとヒットする。確かに正解です。 けど直感的にはgankaでもいいように見えますね。 普通は頭からマッチさせていってマッチしたらそれで進めて行くという風になっています。 いくら正規表現が欲張りだからっ

  • 1