正規表現No.33582
K'zawa さん 14/10/10 17:31
 
こんにちは、K'zawaです。

下記の置換で、"{n}"の回数指定がうまくいきません。
"+"や"*"的に最大にマッチします。

replacedown "^(.*?,){2}", "", regular;


秀丸エディタ Version 8.41 32bit edition

[ ]
RE:33582 正規表現No.33583
秀まるお2 さん 14/10/10 17:48
 
 これは…。仕様ってことでいいような気がします。

 最小長さにマッチさせたい場合は、

    ^(.*?,){2}?

 と書いていただければ一応うまくいきます。

    ^(.*,){2}?

 でも同じ結果になりますけども。

 {2}だけだと、それ自体を最大長さにマッチさせる方が優先になるので、結果
的に「.*?」が長めにヒットしてしまうようです。

[ ]
RE:33583 正規表現No.33584
K'zawa さん 14/10/10 19:34
 
秀まるおさん、こんにちは。
K'zawaです。

> これは…。仕様ってことでいいような気がします。

仕様ですか、わかりました。
perlとは逆なんですね。

[ ]
RE:33584 正規表現No.33585
秀まるお2 さん 14/10/10 23:11
 
 HmJre.dllは、かなり昔の正規表現プログラムしか参考にしてなくて、この辺
の最長一致/最短一致関係のロジックはほぼ僕がオリジナルで作った物で、他の
正規表現ライブラリとは動きが異なる可能性が高くなってしまうかなぁと思いま
す。

 今回のように、括弧の外側と内側とで最長一致/最短一致の指定が違ってると、
果たしてどっちを優先するかで動作が異なってしまうのかなぁと思います。

 鬼車さんとかの場合だと、例えば

 .+

 に類似した正規表現として、

 .+?

 のような最短一致指定とは別に、

 .++

 のような「強欲」って指定があったりします。HmJre.dllでの「.+」は常に最
長一致にヒットするはずなので、標準でその「強欲」相当の動作になってしまっ
てるのかもしれません。(詳しくは調べてないけど)

[ ]
RE:33585 正規表現No.33590
K'zawa さん 14/10/11 09:45
 
秀まるおさん、こんにちは。
K'zawaです。

"{n}?"という表現は、"{n,}?"、"{n,m}?"との対応で存在しているだけなのかと
思いこんでいました。

[ ]
RE:33590 正規表現No.33602
秀まるお2 さん 14/10/14 10:32
 
 今さらのコメントですが…

> "{n}?"という表現は、"{n,}?"、"{n,m}?"との対応で存在しているだけなのかと
> 思いこんでいました。

 今のHmJre.dllの処理では、とにかく「?」じゃない方の繰り返しマッチングは、
「なるべく長い文字列にマッチする方優先」であって、「繰り返し回数的に多い
方優先」とは別なので、その辺がちょっと予想と違う動きになる原因かと思いま
す。

 他の正規表現ライブラリは少しロジックが違うようではあります。

[ ]
RE:33590 正規表現No.33604
秀まるお2 さん 14/10/14 10:39
 
 せっかくなので、繰り返しパターンを入れ子にした場合の「最長一致/最短一
致」のどっち優先かのロジック、および、{n}を指定した場合にも最長一致が働
くことをヘルプに追記させていただきます。

[ ]
RE:33604 正規表現No.33605
K'zawa さん 14/10/14 15:38
 
秀まるおさん、こんにちは。
K'zawaです。

> せっかくなので、繰り返しパターンを入れ子にした場合の「最長一致/最短一
>致」のどっち優先かのロジック、および、{n}を指定した場合にも最長一致が働
>くことをヘルプに追記させていただきます。

よろしくお願いします。

[ ]