正規表現の仕様についての質問ですNo.09157
らうの さん 20/02/10 23:35
 
マクロを作成中、ある正規表現での検索式での結果が通常の検索とマクロ中で異なっ
ていたので、どういう理由によるものかお聞かせ願えればと思い質問させていただき
ます。

1〜2桁の半角数字を検索するマクロを作成していました。
このとき、前後に半角英字がある場合は対象外としていました。
「2月」の「2」にはヒットするが「AKB48」の「48」は無視する形です。
このときの検索式は「(?<![0-9A-Za-Z])([0-9]{1,2})(?![0-9A-Za-Z])」としました。

ただ、上記検索式にはミスがあり、「a-z」とすべきところが「a-Z」となっています。
そのためこのマクロを実行すると「AKB48」では当方の意図通りにスルーするのです
が、「akb48」では「48」にヒットしてしまいます。
ここまでは仕様通りの動作なのだと思います。
私もこのミスに気が付いて修正をしました。

ただ今回気になったのが、通常の検索で正規表現を有効にした状態で「(?<![0-9A-Za
-Z])([0-9]{1,2})(?![0-9A-Za-Z])」を入力すると、「akb48」にもヒットしないこと
です。

つまり正規表現で「(?<![0-9A-Za-Z])([0-9]{1,2})(?![0-9A-Za-Z])」を検索すると、
「akb48」には

マクロ:ヒットする
通常の検索:ヒットしない

と、結果が分かれたのです。

今回のマクロ作成では、通常の検索で挙動を確認してからマクロに組み込むことを繰
り返していました。
ですが上述の誤った検索式でヒットしないことを確認してからマクロに組み込んで実
施したら意図せずヒットしたので、少し悩むことになりました。
どのような理由によるものかお聞かせいただければ幸いです。

なお、秀丸エディタのバージョンは8.89、HMJRE.DLLは5.06です。
どうかよろしくお願い致します。

[ ]
RE:09157 正規表現の仕様についての質問でNo.09158
さん 20/02/11 00:03
 
 こんばんは、1ユーザーの陸といいます。

 あくまで推測ですが、試した限りでは、大文字/小文字を区別するかどうかの設定
が影響している気がします。
 秀丸エディタの通常の検索では、標準で「大文字/小文字の区別」がチェックなし
になっています。
 これと同等にするには、マクロでは「FindRegularNoCaseSense」関数を利用する必
要があります。
 また、逆に、秀丸エディタの通常の検索で「FindRegular」関数と同じ結果にする
には、「大文字/小文字の区別」にチェックをつける必要があります。
 何か参考になれば幸いです。

 それでは。

[ ]
RE:09158 正規表現の仕様についての質問でNo.09159
秀丸担当 さん 20/02/12 09:09
 

陸さんも書かれている通り、おそらく大文字/小文字の区別が違う可能性が高いと思
います。
searchdown等でregularだけを指定すると、大文字/小文字の区別がある扱いになり、
言われている通りになります。
nocasesenseも同時に指定すると、検索ダイアログで「大文字/小文字の区別」をOFF
にしたときと同じになります。
casesenseかnocasesenseのどちらも指定しない場合は組み合わせによって違うので、
常にどちらかを指定すると確実です。

[ ]
RE:09159 正規表現の仕様についての質問でNo.09160
らうの さん 20/02/13 02:12
 
>
> ......
>casesenseかnocasesenseのどちらも指定しない場合は組み合わせによって違うので、
>常にどちらかを指定すると確実です。

お二方とも返信、どうもありがとうございます。
実際にオプションの有効無効を繰り返して、言われている通りの挙動になることを確
認しました。
これですっきりしました。
本当にどうもありがとうございました。

[ ]