私事ではあるけれど、正規表現ライブラリの言語/フレームワークごとの仕様のばらつきにはいい加減うんざりさせられている。
特に先読み/後読み(look-ahead/look-behind) の実装のばらつきは本当に困る。どことは書かないけど、ライブラリを試すたびにだいたい以下のような目に遭う。
- 先読みと後読みの片方しか実装していない、あるいは未実装
- 先読み/後読みの中で並列
|
メタキャラクターを使うとがっつり例外で落ちる(あと*
や+
なども)
最近だと、Golang の正規表現ライブラリで使用されているRE2(https://github.com/google/re2/wiki/Syntax) という仕様では先読み/後読みをあっさり諦めていて、ちょっと凹んだ。JavaScript の正規表現ライブラリも後読みがない。
自分が使っている中で先読み/後読みがちゃんと動作するのは、Ruby の Onigmo、.NET Framework、PowerGrep という Windows アプリぐらい。perl や PHP は使ってないのでわからない。
多くのエンジニアは、先読み/後読みの不備をなまじコーディングでアドホックにカバーしてしまったりするので、ライブラリが洗練されない。自分はマルチプラットフォームでの正規表現そのものに用があるので、コーディングでカバーという選択肢はない。
先読み/後読みの実装がかなり面倒臭いこと、特にその中でメタキャラクターを使えるようにするのは大変であることは想像が付くのだけど、もう少しどうにかなって欲しい。少なくとも、各言語/フレームワークでばらつきまくっている仕様がせめてひとつにまとまる方向に少しずつでも動き出して欲しい。
どうぞよろしくお願いします。
あまり知られていないようなのでここにメモしておくけど、Unicode コンソーシアムは上のリンクにあるような Unicode 用の正規表現の仕様を公開している。ステータスを見るととっくに承認完了していて正式な仕様になっている。
とりあえず正規表現ライブラリを日夜メンテしている凄腕エンジニアの皆様には、今後この仕様に沿ったライブラリのアップデートを行っていただければと切に願う次第です。