最短マッチ

正規表現、難しいなぁ……
期待通りの動作を一発でしない。


まぁ一度うまくいくとコピペしちゃってるから……つまりそれだけ考えてないってことなんでしょうけど(^^;;)


どこでハマったかというと、CSVのカラムを処理する際に

  • ([^,]*)

と書いていたのですが、CSVの書いてない行も引っかけてしまいまして(><。。。


基本的にHTMLで、誤認識するのはHTMLのタグで始まる箇所だったので、以下のように書きました。

  • ([^,]|[^<]*)

なるほど、|でどちらか一方にできるけど、[]の外で書かないといけないのね。

  • ([^,|<]*)

と書いて動かないよー、って悩んでしまいました。そりゃ、動かないよ。


▽8.正規表現(基礎から解る!PHP入門講座)
 http://www.flzphp.com/second.php?page_num=508


…………それでも狙いどおりの動きをしないので、PHP正規表現チェッカー ver1.0.1と首っぴきで再検討。


検索パターンは、原則、最長マッチで、最短マッチにしたい場合には{}?と指定しないといけないらしい。原則が最長マッチなら、そりゃ想定通りの動きをしないわけだわ。むしろ今まで動いていたのが不思議。最初に戻って正規表現の部分を全部書き直したいけど、どうせ作り直しの時に全部書き直すのが前提だからいいことにする(でないときりがない)。


以下の記事が極めて具体的でわかりやすかったです。

そこで「*や+という繰り返しをどこまでやるのか?」という問いに「繰り返しは最小でお願いします」と注文するのが最短マッチ(メタ文字?を付ける)ということになる


正規表現の最短マッチの使い方 (cloned.log)
 http://d.hatena.ne.jp/cloned/20061110