|
お世話になっております。
さて、現在秀丸エディタ上でHmJre.dllで正規表現を使う際に大きな問題が起きてい
ます。
それは、正規表現の「式自体」を記憶して繰り返し/再帰的に実行できないことです。
このため、
1. 同じ正規表現式を何度も繰り返して書かなくてはならない。
2. 入れ子になった括弧などに正しくマッチできない。
という悩みを当方で抱えています。
1.については例えば
19.68.2340.3.6512.3245.9021.45321.5
というような任意個数の.区切りの数字にマッチさせるために
^([0-9]+)(\.([0-9]+))*$
とする必要があるのですが、問題なのは、
19
や
68
などの数字部分にマッチする
([0-9]+)
を同じ式内に2回書かないといけないことです。また、マクロ内や.hilightファイル内で
19.68.2340.3.6512.3245.9021.45321.5
などと、この形式を内包した
(234.5.67.89),(101.34.321098)
などにマッチする正規表現式を別々のステートメントや行に書く必要があるときに、
それぞれ
^(([0-9]+)(\.([0-9]+))*)$
と
^\((([0-9]+)(\.([0-9]+))*)\),\((([0-9]+)(\.([0-9]+))*)\)$
にする必要があるのですが、やはり
(([0-9]+)(\.([0-9]+))*)
を3回、
([0-9]+)
に至っては3*2=6回も書かないといけません。このことにより、
・同じ式をミスなくコピペするのが大変。
・式の修正の際に一度に全て書き換えなければならない。
という開発や保守に大きな支障をきたす「DRY原則違反」の状態となってしまいます。
また、
式が肥大化して強調表示の3999文字などの文字数制限に簡単に引っかかってしまいま
す。
2.ついては、過去の投稿でも申しましたが、
<<qwer>,abc,<def,<wsd,rfv>>>
というような括弧の入れ子構造にマッチさせるためには、「括弧にマッチする式」自
体に
自分自身を内包した再帰式を定義しなければならず、そのためには式を記憶して、い
つでも
その式を実行できる機能が絶対に必要です。
そこで要望があるのですが、式自体に名前を付けて一旦記憶し、その後はいつでも名
前を
使ってその式を実行する「部分式呼び出し」を実装してもらえれば大変助かります。
部分式呼び出しのサポートは既にRuby言語の正規表現エンジン
https://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html#subexp
や鬼雲
https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja
などで広く行われています。
鬼雲に関しては、h-tom氏による「hmonig.dll」が秀丸エディタの正規表現エンジン
として
使用可能なのですが、部分式が使えるスコープはそれを定義した1つの式中のみであり、
マクロの複数の文や.hilightファイルの各行に書かれた複数の式を跨いでの実行はで
きません。
そこで、秀丸エディタ本体側で行やマクロ実行単位やウィンドウ(タブモードならタ
ブ)を
跨いだスコープで使用可能な部分式呼び出しが有ればと思っています。具体的には
1. 1つの正規表現式の中だけ。例えば検索/置換/GREPの1回の実行だけとか、マクロの
setsearchの1回の実行だけとか、.hilightファイルの1行内だけとか。
2. マクロの1回の実行内や.hilightファイル1個内。マクロの場合はsetsearchなど
で部分式に
名前を付ける式を1回実行すれば別の文上では名前で呼び出す式だけで実行可能。
.hilightファイルではある行で部分式に名前を付ける式を書いておけばそれ以
降の行で
その部分式を呼び出せる。
3. 秀丸エディタのプロセス単位。例えば、検索/置換/GREPで一度部分式に名前を
付ける式を
実行すれば、以降そのウインドウ(タブ)上のマクロであれ強調表示であれその
部分式を
呼び出せる。
4. 全ての秀丸エディタ。あるウインドウ(タブ)上で一度部分式に名前を付ける式
を実行すれば
他のウインドウ(タブ)でも使用可能になる。
の4段階ぐらいのスコープを用意してもらえれば助かります。具体的な構文の案として、
(?<name,scope>式)
で式を記憶して
\G<name>
で呼び出すというような感じです。
どうかよろしくお願いします。
|
|