タグ付き正規表現の拡張No.34706
おすぎ さん 16/01/15 09:48
 
いつもお世話になっています。

タグ付き正規表現による置換はとても重宝しています。
ですが、置換個数は、\1〜\9の9個です。
これを、10個以上に拡張することは可能でしょうか?


[ ]
RE:34706 タグ付き正規表現の拡張No.34707
秀まるお2 さん 16/01/15 14:45
 
 タグ付き正規表現ですが、0〜9よりも大きい番号を指定する文法として適当な
のが無いので、それ以上拡張するのは無理じゃないかと思います。

 内部の処理的にも、指定できる数字が大きくなるとその分遅くなるなど、弊害
も出てしまうと思います。

 タグの数が足りないくらいいっぱい括弧を使ってる場合は、タグとして使わな
い所を探して、そこを

 (?:    )

 で囲むようにすればいいです。そうするとそこはタグから対象外になります。

 例えば

 (a+)(?:b+)(c+)

 とすると、\1が(a+)部分、\2が(c+)部分になります。

 どうしてもタグを10個以上指定しないと出来ないような置換の例があるよう
でしたら、具体的にどういうパターンか教えていただければ、何か別の解決策が
お返事できるかもしれません。

[ ]
RE:34707 タグ付き正規表現の拡張No.34708
おすぎ さん 16/01/16 09:37
 
秀まるお2さま

お返事ありがとうございます。
タグ10個以上は無理だということ、承知いたしました。

具体的な置換パターンについて簡単にお話しします。
当方は特許翻訳者でして、タグ付き表現を使った翻訳の省力化を図っています。

1つのファイルに次の2つの日本語があったとします(数字だけ違う文章)。
@コンピュータ1はHDD2とメモリ3を備えている。
Aコンピュータ10はHDD20とメモリ30を備えている。

英訳文はそれぞれ次のようになります。
@A computer 1 has an HDD 2 and a memory 3.
AA computer 10 has an HDD 20 and a memory 30.

次の置換を行なうと、@とAの英訳が一度にできて非常に便利です。
検索語:コンピュータ([0-9]+)はHDD([0-9]+)とメモリ([0-9]+)を備えている。
置換語:A computer \1 has an HDD \2 and a memory \3.

上の例では数字が3箇所ですが、たまに10箇所以上の場合もあります。
そのためタグが10個以上使えれば助かります。

でもそんなのはレアケースです。
ご面倒をおかけしました。

[ ]
RE:34707 タグ付き正規表現の拡張No.34716
h-tom さん 16/01/18 00:34
 

h-tom です。

> タグ付き正規表現ですが、0〜9よりも大きい番号を指定する文法として適当な
>のが無いので、それ以上拡張するのは無理じゃないかと思います。
後方参照の形式ですが、
perl :\g{n}
鬼車 :\k<n>、\k'n'
という指定方法があり、nには10以上も指定可能です。

[ ]
RE:34708 タグ付き正規表現の拡張No.34717
秀まるお2 さん 16/01/18 08:49
 
 具体的な例があれば、とお返事しつつ、実際例を書いていただいて、代替策が
あるかというと・・・、すみませんがいい案が思いつきませんでした。

 10以上のタグを指定する構文もあるってことなので、HmJre.dll側で対応で
きないか考えてみます。

[ ]
RE:34716 タグ付き正規表現の拡張No.34718
秀まるお2 さん 16/01/18 08:54
 
 10以上を指定する構文もちゃんとあるということで、情報ありがとうござい
ます。

 今ちょっとソースコード見直しなどしてみたんですが、HmJre.dllの場合は
タグを覚えておく用のメモリを最大数まで用意すればいいだけで、その数を増や
しても速度低下にはならないようです。

 対応できそうな雰囲気なので、なんとか出来る方向で見直してみます。

[ ]
RE:34718 タグ付き正規表現の拡張No.34720
おすぎ さん 16/01/18 09:51
 
h-tomさん
秀まるお2さん

ありがとうございます。
よろしくお願いいたします。

[ ]
RE:34720 タグ付き正規表現の拡張No.34728
秀まるお2 さん 16/01/19 09:28
 
 いろいろ見直しをした結果、1〜15までなら簡単に対応できることが分かりま
した。ということで、とりあえず15まで対応させていただきます。

 Perlを見習って、\g{10} みたいな指定をする方式にします。

 秀丸エディタのVersion 8.56がもうすぐ正式版になる予定なので、余計なレベ
ルダウンのバグを出すといけないので、その次のV8.58βからの対応とさせてい
ただきます。

[ ]
RE:34728 タグ付き正規表現の拡張No.34729
おすぎ さん 16/01/19 11:15
 
秀まるお2さま

早速のご対応、ありがとうございます。

[ ]
RE:34728 タグ付き正規表現の拡張No.34731
h-tom さん 16/01/19 23:46
 

h-tom です。

> Perlを見習って、\g{10} みたいな指定をする方式にします。

念のため。
Perlの場合、\g{n} の n は負の数も指定可能で、相対位置指定になります。

例:(a)(b)(c)\g{-1}\g{-3}
   \g{-1} = c 、\g{-1}の位置から1つ前のグループ
   \g{-3} = a 、\g{-3}の位置から3つ前のグループ

今回対応するのが 1〜15 までなら、負の数は指定できないとの注意書きが
あったほうが良いと思います。

[ ]
RE:34731 タグ付き正規表現の拡張No.34732
秀まるお2 さん 16/01/22 17:11
 
 またまた情報ありがとうございます。

 負の数には対応しないでおこうと思うので、注意書き追加させていただきます。

 それと、実はPerlだと、括弧が入れ子になってた場合にも、すべての括弧がタ
グとして指定できるそうですが、HmJre.dllでは一番外側の括弧しか対応してな
いです。それもついでにヘルプに追加しようと思います。

[ ]
RE:34732 タグ付き正規表現の拡張No.34751
秀まるお2 さん 16/01/27 16:19
 
 今さらのコメントですが、「\g{-1}」とかの負の数指定も対応させていただき
ます。

 そんなに難しくありませんでした。

[ ]