高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

センス ねえ

今日、学校にて正規表現を使用したプログラミングを教えました。結構高度なやつで、拡張正規表現(?!)など も結構出てくるものです。
横から見ていた友達が「難しくはないかもしれないけど、センスがいるよね」と言っていました。なるほど、そうだなあ と思います。人の書いた正規表現なんかもそうですが、いくら長くても分かるときはすぐ内容が理解できるでしょうけど、読めないときはほんとに読めないですよね。


ところで、わたしは、複数行にマッチするためのコードとして、((.+?)[\r\n]+)と言う表現をいつもよく使います。たとえばこの先頭に(?!%)と書いて、((?!%)(.+?)[\r\n]+)と書いてやれば、「現在の検索位置から、行頭に%がくるまですべての行にマッチ」という表現になります。NP_HatenaLikeなんかでもかなり多用させてもらいました。特にリスト作成のコードとか。
はてなのブロック構造系の記法なんかは特にそうですが、複数行にまたがる文字列にマッチさせたいときは、シングルラインとしてマッチすることが多い。こういうときはこんな感じが良いです。
ただ、[\r\n]+というのを何とか出来ないかなあ。以前\nだけにしてみたんですが、やっぱりうまくいかなかったんですよね。