|
はじめまして。山田太郎と申します。
秀丸エディタ Ver4.07 & HmJre.dll Ver1.09 での現象です(OS: Windows Me)。
"*"演算子はこのままだと最長一致を目指すはずですが、
ある条件下(特定出来ていません)で"*?"のように振舞うようです。
例えば以下のような文字列
"松井秀喜 & 松井稼頭央"
に対して ".*松井" -> "Matsui" といった置換を行うことを考えると、期待される動
作は
".*松井" が "松井秀喜 & 松井" まで一気に消費して、置換後の文字列が "Matsui稼
頭央" となること
ですが(JRE32.DLL 及び HmJre.dll Ver1.00 だとちゃんとこのように振舞います)、
実際には、
まず行頭の "松井" にマッチ(そして置換)、次に "秀喜 & 松井" にマッチ(そし
て置換)、という具合に
都合2度マッチして、置換後の文字列が "MatsuiMatsui稼頭央" となってしまいます。
この“ものぐさ志向”は相当強いらしく、例えば上記の例において
".*松井\f[^&]*$" -> "Matsui\1"
と置換するようにすれば、(\1には"&"を含まない文字列しか格納されないので)
強制的に最長一致させられそうなものですが、この場合においてすら、置換後の文字
列は
"Matsui秀喜 & 松井稼頭央" というものになってしまいます(\1 == "秀喜 & 松井稼
頭央")。
つまり、通常は、
(ものぐさ指定したにしても)後に続く部分正規表現がマッチするように配慮しなが
らものぐさに振舞う
(後に続く正規表現がマッチしなくなるようであれば、しぶしぶ greedy に振舞う)
ものですが、
この例の場合だと、後に続く部分正規表現("[^&]*$")のことなどまるでお構いなし
に、
盲目的にものぐさに振舞っているようです。
しかも、そのことによってマッチしなくなってしまったはずの部分正規表現 "[^&]*$
" が、
"秀喜 & 松井稼頭央" にマッチしてしまう(延いては、全体としてマッチする)のが
分かりません。
結果的に全体としてマッチしなくなるというのならまだ分かるのですが(それでも充
分異常ですが)。
尚、HmJre.dll Ver1.00 だと、上記の ".*松井\f[^&]*$" -> "Matsui\1" という置換
では期待通りに
"Matsui稼頭央" となりますが、明示的にものぐさ指定して ".*?松井\f[^&]*$" -> "
Matsui\1" とすると
(これでも "Matsui稼頭央" にならなければならないはずなのですが)、
やはり "Matsui秀喜 & 松井稼頭央" となってしまい、これもおかしいです。
どこか考え違いがあればご指摘下さると幸いです。
|
|