正規表現で [^.....]$ の扱いNo.05545
Iranoan さん 04/06/14 17:17
 
 秀丸担当さん今日は、Iranoan です。
 http://www.maruo.co.jp/hidesoft/4/x04294_.html#4303 から移ってきました。
 Jre32.dll/HmJre.dll のどちらであるかに関わらず、
> > >[^.!?>]$
は改行にもヒットし、これを回避するには、
> [^.!?>\n]$
等とする必要があるのは仕様でしょうか?

 こちらの環境は、Windows98+IE6.0+秀丸 Ver.4.10β32 です。

[ ]
RE:05545 正規表現で [^.....]$ の扱いNo.05549
秀丸担当 さん 04/06/14 18:19
 

> http://www.maruo.co.jp/hidesoft/4/x04294_.html#4303 から移ってきました。
> Jre32.dll/HmJre.dll のどちらであるかに関わらず、
>> > >[^.!?>]$
>は改行にもヒットし、これを回避するには、
>> [^.!?>\n]$
>等とする必要があるのは仕様でしょうか?

調べてみたところ、秀丸で特別な例外的な処理をしていることもないので、仕様
ということでいいと思います。
Hmjre.dllでもJre32.dllでもBregif.dllでも同様の結果が得られました。

[ ]
RE:05549 正規表現で [^.....]$ の扱いNo.05551
Iranoan さん 04/06/14 18:40
 
 秀丸担当さん今日は、Iranoan です。
> 調べてみたところ、秀丸で特別な例外的な処理をしていることもないので、仕様
> ということでいいと思います。
 解りました。とにかく改行も除外したければ、「[^....]」に「\n」も含ま
なければ行けないということですね。

[ ]
RE:05551 正規表現で [^.....]$ の扱いNo.05556
ENCODINGSHIFTJIS さん 04/06/15 10:17
 
Perl でも複数行は微妙です。特に文字列(末尾とかも)に空改行が
ある場合(0...+)

秀丸の正規表現マッチは m と思います。
[^a] は改行にマッチする → Perl(m、 s) と同じ
単ピリオドは改行にマッチしない → Perlのs修飾 でない m 扱い

> > >[^.!?>]$
は改行にもヒットし、これを回避するには、

マッチの説明としては。
[^.!?>] は改行にマッチします。
$ は上の改行直後にあって、『次の空改行の直前にマッチしてます』。
!残念!

文字列マッチの非直感的なダークサイドにやられてしまってます。

[ ]
RE:05556 正規表現で [^.....]$ の扱いNo.05561
encodingshiftjis さん 04/06/15 23:21
 
直感的理解しにくい点は
 . は改行にマッチせず  [^.]  は改行にマッチする。. → [^\n]
$は 改行の直前にマッチするゼロ幅マッチである。 $ → (?=\n)

この場合のポイントは
見た目で分かる『行』という概念ではなく
-------\n-----\n----\n\n\n----\n\n---\n---
改行を含む文字列といるイメージを使うとわかります。

[ ]
RE:05561 正規表現で [^.....]$ の扱いNo.05562
ENCODINGSHIFTJIS さん 04/06/16 08:40
 
見た目では、行末と次行の行頭は離れているが
データでは連続していると。
WYSIWYG とデータモデルの完全一致できない部分なのでしょう。

[ ]