強力な正規表現#8
落ちる話からは離れて、いったい今実装している正規表現の何が不満かという話。
あたしゃ正規表現自体普段使わないし詳しくないので、一口に正規表現と言っているが、
実際はどんな書き方が通るのかが、物によってもバージョンによっても違うらしい。
今使ってるTRegExprが、一般に正規表現と言われるものに比べて、
十分な実装がされているのかされていないのか、その判断すら難しいほど無知なんだが、
ウチにある正規表現について書かれた本を見ると、ここが違うなぁとか感じるわけ。
いや、本当に違っているのか、あたしの勘違いなのかすら判断出来ないレベルだけどね。
検索は良いんだけど置換がどうも違う気がするんだよね。
そこで、例によってEmEditorフリー版で動作を検証しようとしたら、
正規表現は検索には使えるけど置換には使えない模様。
「正規表現を使用する」ってオプションはあるのに、チェック入れてもヒットしない。
有料版のみの機能なのか、残念。
で、Alphaで動作検証してみてるんだが、「○○を××に置き換えますか?」が欲しい。
どこをどう置き換えていったのか、確認できなくて検証しにくい。
って、別に検証するために作られた物じゃないし、こんな話しても仕方ないが。
納得いかないのはbackreferencesについて。
TRegExprのヘルプには¥1~¥9で後方参照が出来ると書いてある。
例として、(.+)¥1+で123123にマッチできるんだと。
カッコでくくった部分にマッチした文字列を¥1で呼び出して繰り返せという指示だ。
ここまではちゃんと動作していて矛盾もない。
書籍によると、置換文字列にも¥1~¥9を入れることでカッコを示す事が出来るらしく、
Alphaでもそのように動くので、きっと標準的な動作だと思う。
だがTRegExprではこれが効かない。
かわりに、$0で全体を、$1~$9でカッコを指すことは出来る。
Alphaは$でも¥でも動く。
この辺の対応をしたい。
他にも置換文字列に入れた物がどう扱われるかはナゾが多く、
当初、¥nや¥tに置換しろと入れても改行やタブになってくれなくて、
この部分だけを自前で実装したりしたんだよね。
たぶん検索するだけなら機能は十分なライブラリだと思うが、
置換はよくわからない状態で作りかけなんじゃないかなぁって感じている。
ともかくその辺を直していこうかと。
検索を修正するのは意味わからないとつらいけど、置換文字列のパースぐらいは出来そう。
仕組みがわからなくても出来そうな修正のみで、正規表現はおしまいにしたいな。