マクロでの正規表現方法での"|"No.23012
つじ さん 07/05/17 16:12
 
S-JISをうまく処理できない海外ソフトで、ファイルを出力しました。
文字化け部を修正するマクロを書いているのですが、次のような問題に当たりました。

マクロ内での検索表現は以下の通りです。
searchdown "\\\\x[a-f0-9][a-f0-9][^\x(22|2E|3A|20)]" , regular
3つめのキャラクタクラスは、
"(\x22)
.(\x2E)
:(\x3A)
 (\x20)
以外というつもりで書きました。

ところがなぜか、
"\x83|"

"\x81A"
がマッチしません。

どうしてなのか、わかりません。
ご教授願えたらと思います。

[ ]
RE:23012 マクロでの正規表現方法での"|"No.23013
Iranoan さん 07/05/17 16:28
 
 つじさん今日は、Iranoan です。
> searchdown "\\\\x[a-f0-9][a-f0-9][^\x(22|2E|3A|20)]" , regular
<snip>
> 以外というつもりで書きました。
 キャラクタ・クラスで文字列の否定は出来ません。後方不一致を使って、最後を
(?!\\\\x(22|2E|3A|20))
としてはいかがでしょう。あと元々最後の \x は間違いですね。マクロなので、
\\\\x としないと。

[ ]
RE:23013 マクロでの正規表現方法での"|"No.23016
秀丸担当 さん 07/05/17 18:02
 

一応補足しておきますと、キャラクタクラスで文字列の否定はできないですが、
このケースは一文字ずつの羅列に展開できるので、以下のように書いてもできる
と思います。

検索ダイアログでは
\\x[a-f0-9][a-f0-9][^\x22\x2E\x3A\x20]

マクロでは
\\\\x[a-f0-9][a-f0-9][^\\x22\\x2E\\x3A\\x20]

[ ]
RE:23016 マクロでの正規表現方法での"|"No.23018
つじ さん 07/05/17 23:08
 
Iranoan さん, 秀丸担当 さん

ご返答ありがとうございました!!
無事動きました!!

ここ数年悩んで放置していた文字化け問題が無事解消されました!!

正規表現に対する理解がまだまだ足りないようです(^^ゞ

まだマクロの処理速度が遅いので、これからマクロのシェイプアップに挑んでみます!!

[ ]