正規表現(BRegIf.dll)No.09902
エルドラド さん 06/03/21 21:25
 
Ver6.00β8とBRegIf.dllの組み合わせにおいて、
ABC.+[^。]$という正規表現を用いると、
ABCD。(改行)がヒットしてしまいます。

Ver6.00β7以前には発生しなかったように思われます。ご確認よろしくお願いします。


[ ]
RE:09902 正規表現(BRegIf.dll)No.09903
ENCODINGSHIFTJIS さん 06/03/22 00:59
 
>Ver6.00β8とBRegIf.dllの組み合わせにおいて、
>ABC.+[^。]$という正規表現を用いると、
>ABCD。(改行)がヒットしてしまいます。

.+
には
D。
がマッチして

[^。]
には
改行がマッチするので

$
には
行末にマッチしても
いいのでは?

[^。\n]
かな?

[ ]
RE:09903 正規表現(BRegIf.dll)No.09904
ENCODINGSHIFTJIS さん 06/03/22 01:09
 
正規表現の基本は文字列単一行モード
$ は文字列の末尾にマッチ

複数行モードでは、行末に $をマッチさせます
加えて[] は改行コードにもマッチします。
エディタのWYSIWYG と微妙なズレかも。

[ ]
RE:09904 正規表現(BRegIf.dll)No.09905
エルドラド さん 06/03/22 02:59
 
>正規表現の基本は文字列単一行モード
>$ は文字列の末尾にマッチ
>
>複数行モードでは、行末に $をマッチさせます
>加えて[] は改行コードにもマッチします。
>エディタのWYSIWYG と微妙なズレかも。

コメントありがとうございました。

説明を補足しますと、やりたいことは、改行前の特定の文章が「。」で終わっていな
い箇所の発見です(誤記対策)。

コメントを参考にして、
ABC.+[^。]\n
とすることにより所望の動作を得られました。

HMJRE.DLLの場合、
ABC.+[^。]$で検索すると、ABCD。<改行>[^。]$がヒットしますが、
表示とカラー→強調表示で指定すると強調表示がされません。
BRegIf.dllの場合にも、おそらく、ver5およびver6.beta7までは、強調表示がされて
いませんでした。

このため、正規表現の不正確さに気がつかなかったようです。

とはいえ、秀丸側の動作の不一致には何かしら問題があるような気がします。


[ ]
RE:09905 正規表現(BRegIf.dll)No.09907
秀丸担当 さん 06/03/22 14:54
 

>HMJRE.DLLの場合、
>ABC.+[^。]$で検索すると、ABCD。<改行>[^。]$がヒットしますが、
>表示とカラー→強調表示で指定すると強調表示がされません。
>BRegIf.dllの場合にも、おそらく、ver5およびver6.beta7までは、強調表示がされて
>いませんでした。
>
>このため、正規表現の不正確さに気がつかなかったようです。
>
>とはいえ、秀丸側の動作の不一致には何かしら問題があるような気がします。

報告ありがとうございます。
この変化は、β8ではなくたぶんβ1から起きているはずなのですが、強調表示で
1行の最後の改行も含めるようにしたためだと思われます。

いろいろ調べてみたところ、[表示とカラー]→[強調表示]で最後の改行も含める
処理に不具合があり、BRegIf.dllのほうでは差異が出てしまったようです。
1行の最後の改行を含めるのは「検索文字列の強調」だけにして、[表示とカ
ラー]→[強調表示]ではV5.xxの従来通り、改行は含めないように修正させていた
だきます。

[ ]
RE:09907 正規表現(BRegIf.dll)No.09910
Iranoan さん 06/03/22 15:29
 
 秀丸担当さん今日は、Iranoan です。
> 1行の最後の改行を含めるのは「検索文字列の強調」だけにして、[表示とカ
> ラー]→[強調表示]ではV5.xxの従来通り、改行は含めないように修正させていた
> だきます。
 これについて質問です。これは「複数行コメント」の定義でも同様でしょう
か? もし同様だと、現在手元で「\{」と「\}」を「{}」のブロックから除外す
るように、
文字列(1) :(?<!\\)(\\\\)*(\\\{)(?\2)
正規表現  :ON
文字列(2) :(?=.)
正規表現  :ON
としているのですが、これが動作するのか心配です。

[ ]
RE:09910 正規表現(BRegIf.dll)No.09913
秀丸担当 さん 06/03/22 17:55
 

> これについて質問です。これは「複数行コメント」の定義でも同様でしょう
>か? もし同様だと、現在手元で「\{」と「\}」を「{}」のブロックから除外す
>るように、
>文字列(1) :(?<!\\)(\\\\)*(\\\{)(?\2)
>正規表現  :ON
>文字列(2) :(?=.)
>正規表現  :ON
>としているのですが、これが動作するのか心配です。

複数行コメントのユーザー定義は、この修正は関係無いと思います。

ちなみに、複数行コメントで対応する括弧から除外もできるということで、少々
無理矢理このような定義となってしまっていますが、もう少し簡単にできる方法
があったほうがいいかもしれないですね。

複数行コメントのユーザー定義のプロパティで、高度な設定で「複数行」「単一
行」「次の行から色付け」とあるうち、もう1つ追加して、「単語」(単一の文
字列?)というような種類も追加するべきかもしれません。

[ ]
RE:09913 正規表現(BRegIf.dll)No.09916
Iranoan さん 06/03/22 19:49
 
 秀丸担当さん今日は、Iranoan です。
> 複数行コメントのユーザー定義は、この修正は関係無いと思います。
 安心しました。

> 複数行コメントのユーザー定義のプロパティで、高度な設定で「複数行」「単一
> 行」「次の行から色付け」とあるうち、もう1つ追加して、「単語」(単一の文
> 字列?)というような種類も追加するべきかもしれません。
 これが出来ると助かります。今の方法は、非常に複雑なので。

[ ]
RE:09913 正規表現(BRegIf.dll)No.09927
Iranoan さん 06/03/24 13:25
 
 秀丸担当さん今日は、Iranoan です。
> 複数行コメントのユーザー定義のプロパティで、高度な設定で「複数行」「単一
> 行」「次の行から色付け」とあるうち、もう1つ追加して、「単語」(単一の文
> 字列?)というような種類も追加するべきかもしれません。
 対応有り難うございました。
 ただ少し気になったのは、「単語」だと検索のように「前後に英数字がある
と、その様に判断されない」という誤解を与えないでしょうか?

[ ]
RE:09927 正規表現(BRegIf.dll)No.09929
秀丸担当 さん 06/03/24 18:01
 

> 対応有り難うございました。
> ただ少し気になったのは、「単語」だと検索のように「前後に英数字がある
>と、その様に判断されない」という誤解を与えないでしょうか?

その通りだと思います。やっぱり「単一の文字列」にしようと思います。

[ ]
RE:09929 正規表現(BRegIf.dll)No.09932
Iranoan さん 06/03/24 18:44
 
 秀丸担当さん今日は、Iranoan です。
> > ただ少し気になったのは、「単語」だと検索のように「前後に英数字がある
> >と、その様に判断されない」という誤解を与えないでしょうか?
>
> その通りだと思います。やっぱり「単一の文字列」にしようと思います。
 有り難うございます。
 ##私はこのスレッドを読んでいたので、関係なかったのですが(^^;。

[ ]