大文字小文字を無視する正規表現の実行でNo.39719
fzok4234 さん 22/05/14 13:56
 
毎度お世話になっております。


さて、hmonig.dll および HmJreSelect.dll を使用して、Unicode クラスの Lu や L
l などに該当する
単語文字に大文字小文字を無視してマッチする正規表現パターンを実行すると、エ
ラーメッセージが出て
上手くマッチできないトラブルが起きています。


まず、hmonig.dll と HmJreSelect.dll をインストールして「動作環境」で正規表現
 DLL を HmJreSelect.dll に
設定した上で、.HmJreSelect 設定ファイルを以下のようにします。

[DllSelector]
(?#hmonig)=hmonig.dll

[ReplaceRegExp]
(?#psvarname)=(?>(?:)|(?:@\A(?>
        (?<varNameFirstChar>[_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}])
    |   (?<varNameBodyChar>(?>\g<varNameFirstChar>|[\p{Nd}]))
    |   (?<varName>(?<!\g<varNameBodyChar>)\g<varNameFirstChar>\g<varNameBod
yChar>*+)
)))

上記の [ReplaceRegExp] セクションの各項目は見やすいように改行やインデントを
挿入していますが、
実際に保存するときはこれらを置換で削除して 1 行 1 項目になるようにする必要が
あります。

そして、適当なファイルを開いて検索ダイアログから「大文字/小文字の区別」チェ
ックボックスと
正規表現内での「(?i)」オプションを切り替えながら、上記 .HmJreSelect で定義し
た部分式 \g<varName> を
検索して F3 キーを押します。

すると、以下の結果のように「大文字/小文字の区別」チェックボックスと「(?i)」
オプションとの
少なくとも 1 つを用いて、大文字小文字を無視した検索を行うと必ずエラーになっ
てしまいます。

 1.  検索ダイアログと正規表現の両方で大文字小文字を区別。
       検索パターン        = (?#hmonig)(?#lookbehind)(?u)(?#psvarname)\g<va
rName>
       大文字/小文字の区別 = 有効
       結果                = 成功

 2.  正規表現のみで大文字小文字を無視。
       検索パターン        = (?#hmonig)(?#lookbehind)(?iu)(?#psvarname)\g<v
arName>
       大文字/小文字の区別 = 有効
       結果                = エラー 122

 3.  検索ダイアログのみで大文字小文字を無視。
       検索パターン        = (?#hmonig)(?#lookbehind)(?u)(?#psvarname)\g<va
rName>
       大文字/小文字の区別 = 無効
       結果                = エラー 217

 4.  検索ダイアログと正規表現の両方で大文字小文字を無視。
       検索パターン        = (?#hmonig)(?#lookbehind)(?iu)(?#psvarname)\g<v
arName>
       大文字/小文字の区別 = 無効
       結果                = エラー 217

このため、PowerShell などの変数名やキーワードで大文字小文字を無視する言語の
ソース上での
検索や強調表示に支障を来して大変困っております。


環境は、
 ・秀丸エディタ    : 9.15正式版 Float x64
 ・hmonig.dll      : 0.8.7.0
 ・HmJreSelect.dll : 0.2.0
です。



[ ]
RE:39719 大文字小文字を無視する正規表現No.39720
h-tom さん 22/05/14 19:46
 
h-tom です。

> 2.  正規表現のみで大文字小文字を無視。
>       検索パターン        = (?#hmonig)(?#lookbehind)(?iu)(?#psvarname)\g<
>varName>
>       大文字/小文字の区別 = 有効
>       結果                = エラー 122
鬼雲ライブラリに"(?iu)(?#psvarname)\g<varName>"を展開して直接指定しても同じ
エラーになるので、
鬼雲ライブラリ側の問題でしょう。
私では修正できないので、ライブラリ作者に連絡してください。
(hidesoft.2:39708 も同様)

> 3.  検索ダイアログのみで大文字小文字を無視。
>       検索パターン        = (?#hmonig)(?#lookbehind)(?u)(?#psvarname)\g<v
>arName>
>       大文字/小文字の区別 = 無効
>       結果                = エラー 217
>
> 4.  検索ダイアログと正規表現の両方で大文字小文字を無視。
>       検索パターン        = (?#hmonig)(?#lookbehind)(?iu)(?#psvarname)\g<
>varName>
>       大文字/小文字の区別 = 無効
>       結果                = エラー 217
秀丸エディタの「大文字/小文字の区別」の動作だとそうなります。
hmonig.dll 側としては(エラーが出るのは)仕様通りの動作です。

>このため、PowerShell などの変数名やキーワードで大文字小文字を無視する言語の
>ソース上での
>検索や強調表示に支障を来して大変困っております。
現状の hmonig.dll では解決できません。別の正規表現エンジンを使うことをお勧め
します。

[ ]
RE:39720 大文字小文字を無視する正規表現No.39721
fzok4234 さん 22/05/14 22:37
 
> 鬼雲ライブラリに"(?iu)(?#psvarname)\g<varName>"を展開して直接指定しても同
>じエラーになるので、
> 鬼雲ライブラリ側の問題でしょう。
> 私では修正できないので、ライブラリ作者に連絡してください。

本家鬼雲の開発者の k-takata 氏へ GitHub 上にて報告を行いました。
https://github.com/k-takata/Onigmo/issues/158


> (hidesoft.2:39708 も同様)

ついでにこちらもです。
https://github.com/k-takata/Onigmo/issues/159



[ ]