正規表現についてNo.05148
nishi3 さん 10/02/12 10:07
 
先日に続いて連続で恐縮ですが、正規表現の動作について質問です。

例文)ああ1.2%ああ

に対して、正規表現

(?<![0-90-9][.,])([0-90-9.]+)(?![0-90-9.,])

を実行すると、以前のバージョンですと検索にヒットしていたのですが、8βでは検
索にヒットしません。

仕様変更となったのでしょうか?

よろしくお願いします。

[ ]
RE:05148 正規表現についてNo.05151
秀まるお さん 10/02/12 11:13
 
 テストしてみたら、たしかにヒットしませんでした。

 ソースコードを追っかけてみたら、去年の6月に報告いただいたバグ修正のせ
いでおかしくなってしまってました。ということでレベルダウンのバグというこ
とになってしまいます。

 今回こそはもっと慎重にテストして修正させていただきます。

[ ]
RE:05151 正規表現についてNo.05153
秀まるお さん 10/02/12 11:50
 
 レベルダウンといえばレベルダウンのような気もするんですが、もうちょっと
慎重に考えたら仕様ということになってしまうようです。

 なぜかというと…

 今回のケースは後方不一致指定は関係ないので、単純化するために、

 (?<![0-90-9][.,])([0-90-9.]+)

 という正規表現パターンだとします。

 以前ヒットしていた"1.2"の文字列ですが、これは、解釈によっては、前方
不一致指定している

 [0-90-9][.,]

 の部分が"1."にヒットして、([0-90-9.]+)の部分が"2"にヒットした文
字列と解釈出来てしまいます。なので、そういう意味ではヒットしないのが正し
い、ということになってしまいます。

 ということで仕様になってしまいます。

 もともと、(?<!...)の中が可変長だといろんな解釈が発生してしまう可能性が
あって、その場合にヒットした扱いにするのかヒットしない扱いにするのか、ど
っちもありということになってしまうような気がします。

 試しにEmEditorさんでテストしたら、そもそもEmEditorさんでは(?<!...)の中
では可変長の文字列が指定出来ない仕様になってました。

 (無理矢理指定したら無視されるようで)

 しいてこれを以前の仕様に戻すということになると、去年の6月にcolderさん
から連絡いただいた修正を取り消さないといけないです。

---------------------当時の話----------------------------
正規表現
"(?<!foo.*,)bar" …… (1)
"(?<!foo.*?,)bar" …… (2)
テストデータ
"foo,bar,baz" …… (a)
"foo,baz,bar" …… (b)

(1)の正規表現が(a)に、(2)の正規表現が(b)にマッチします。
---------------------当時の話おわり----------------------

 難しいです。

 とりあえず、去年の6月に直したのはそれはそれで必要な処置だと思うので、
現状仕様ってことで通させて欲しい所です。

[ ]
RE:05153 正規表現についてNo.05154
秀まるお さん 10/02/12 12:22
 
 っと返事しておいた所でなんですが、やはりこの論理は通らないような気がし
ました。

 「1.2」の「2」にヒットするなら通りますけども…。

 ということでなんとか修正方法を考えます。

[ ]
RE:05153 正規表現についてNo.05155
Iranoan さん 10/02/12 12:24
 
 秀まるおさん今日は、Iranoan です。
 本題と関係ない気がするのですが、
>  (?<![0-90-9][.,])([0-90-9.]+)
の動作を観ていて、気になったことがあるので、ここに繋げます。

 正規表現における「\」の扱いについての質問です。メタ・キャラクタの直
前につける場合と、エスケープ・シーケンスを除くと、「\」を付けるとどう
なるのでしょう? 私は、無視されて、例えば「\/」としても「/」と同じ、と
思っていました。しかし
(?<![0-90-9][.,])([0-90-9.]+)

(?<![0-90-9][\.\,])([0-90-9\.]+)(?![0-90-9\.\,])
で動作が違います。

[ ]
RE:05155 正規表現についてNo.05156
Iranoan さん 10/02/12 12:30
 
 秀まるおさん今日は、Iranoan です。
> (?<![0-90-9][.,])([0-90-9.]+)
> と
> (?<![0-90-9][\.\,])([0-90-9\.]+)(?![0-90-9\.\,])
送信時のマクロで変換してしまいました。それぞれ、
(?<![0-90-9][.,])([0-90-9.]+)(?![0-90-9.,])
(?<![0-90-9][\.\,])([0-90-9\.]+)(?![0-90-9\.\,])
の間違いです。

[ ]
RE:05156 正規表現についてNo.05157
秀まるお さん 10/02/12 14:22
 
 こちらも調べてみたら、全角文字の直前に「\」があると解釈がおかしくなっ
てしまってました。

 [...]の中じゃない所ならなんとかおかしく解釈されてもうまくヒットしてい
たようですが、[...]の中だと、高速化のためのデータの生成なんかの関係もあ
って、それでうまくいかなくなってました。

 ということでまた修正させていただきます。

[ ]
RE:05157 正規表現についてNo.05158
Iranoan さん 10/02/12 14:35
 
 秀まるおさん今日は、Iranoan です。
>  こちらも調べてみたら、全角文字の直前に「\」があると解釈がおかしくなっ
> てしまってました。
 結果的に不具合が発見されて良かったです。
>  ということでまた修正させていただきます。
 有り難うございます。

[ ]
RE:05154 正規表現についてNo.05159
秀まるお さん 10/02/12 14:51
 
 なんとか直せました。

 HmJre.dllのV3.11にて対応させていただきます。

 なんだかんだで能書きが多くてすみません。

[ ]
RE:05159 正規表現についてNo.05161
nishi3 さん 10/02/13 09:04
 
> なんとか直せました。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> なんだかんだで能書きが多くてすみません。
返信おくれました。

なんか、難しい事になっていたみたいですね

前回の修正も合わせて、対応ありがとうございました。

[ ]