こどくなひびのできごと
2006-12-15
_ elisp と正規表現
mew の folder 推測ルールを書いていたら、elisp で正規表現ってエラいめんどくさい事にきづかされた。要は "^(ML_NAME " とか "^[ML_NAME " みたいな Subject に match させたかっただけなんだけど・・・
まず、elisp で正規表現を書く場合、メタキャラクタをエスケープしようとすると、lisp による評価と正規表現による評価を両方エスケープさせる必要があるのね。要は shell のコマンドラインでエスケープするイメージ。
例えば "\" を正規表現内で使おうとすると "\\" ではなく "\\\\" でようやくその意味をなすというか。んで、"^[ML_NAME " は "^\\[ML_NAME" になるわけです。
んで、その調子で "^\\(ML_NAME " ってかいたらなんかエラー。どうやら、sed の置換要の "\( \)" みたいな部分 match + 切り出しの構文があるらしく、そっちに match して "\)" がないといっているらしい・・・どうやら "()" は lisp 的にはメタキャラクタだが、lisp の正規表現的にはメタキャラクタではなく、"\(" はメタ文字列、と。
ややこしいなおい。
本日のツッコミ(全2件) [ツッコミを入れる]
_ ササヤン [正規表現って書いている時はドキドキ 上手にできたらちょースッキリ。 でも上手くできないと、ストレス溜まりまくり。 ..]
_ takasima [後ろから前から置換、正規表現で気持ちイイ! ってヤツですか。:)]