正規表現「$」と改行No.22677
K'zawa さん 07/03/05 20:54
 
こんにちは、K'zawaです。

X = 改行以外の文字だとして、
検索: [^X]$
で、改行記号がヒットするのは仕様でしょうか?
$ = 行末 = 改行の左 だと思っていたのですが。

そこで、気になったので、
検索: [X\n]$
とやってみたら、
「行末のX」、「行末のXと改行」、「改行のみ」の3パターンにヒットしました。
よく分からなくなりました。

HMJRE.DLL V1.80
秀丸エディタ V6.50 Beta25
WinXP Pro SP2

[ ]
RE:22677 正規表現「$」と改行No.22678
h-tom さん 07/03/05 21:44
 

h-tom です。

>X = 改行以外の文字だとして、
>検索: [^X]$
>で、改行記号がヒットするのは仕様でしょうか?
[^X] = "X"以外の文字 = \n がヒットしているだけなので、仕様というか、
指定した正規表現どおりでしょう。

>$ = 行末 = 改行の左 だと思っていたのですが。
改行の左 = 改行と改行の前の文字との間 = 改行文字の先頭(?) でしょう。

[ ]
RE:22678 正規表現「$」と改行No.22679
K'zawa さん 07/03/06 00:36
 
h-tomさん、こんにちは。
K'zawaです。

>改行の左 = 改行と改行の前の文字との間 = 改行文字の先頭(?) でしょう。

その場所だと思っていたのですが、
で、一行の中で「改行の左の文字」と、
「改行」の2箇所にヒットするのは何故か?
そこのところがしりたかったのです。



[ ]
RE:22679 正規表現「$」と改行No.22682
秀丸担当 さん 07/03/06 10:32
 

>その場所だと思っていたのですが、
>で、一行の中で「改行の左の文字」と、
>「改行」の2箇所にヒットするのは何故か?
>そこのところがしりたかったのです。

HmJre.dllとしては、「$」の解釈は、バッファに含まれる改行文字の直前と、バ
ッファの終端の両方にマッチしていると思います。

ヘルプの正規表現のところにも少し書かれていますが、このあたりは少しややこ
しいことになってしまっていて、検索文字列に「\n」という文字列がが幾つ含ま
れているかによって、正規表現DLLに渡すバッファが異なります。

検索文字列に「\n」が含まれない場合は、バッファは「1行目\n」が渡され、
$の解釈は\nの直前と直後の両方の解釈になると思います。

検索文字列に「\n」が一個含まれる場合は、バッファは「1行目\n2行目\n」が
渡され、$の解釈は\nの直前二箇所と、最後の\nの直後になると思います。

秀丸エディタ本体としてはバッファの渡し方は変わらないですが、正規表現の解
釈は正規表現DLLによって微妙に異なるようです。

[ ]
RE:22682 正規表現「$」と改行No.22688
K'zawa さん 07/03/06 16:10
 
秀丸担当さん、こんにちは。
K'zawaです。

詳しい説明ありがとうございました。

>HmJre.dllとしては、「$」の解釈は、バッファに含まれる改行文字の直前と、バ
>ッファの終端の両方にマッチしていると思います。

やはりそうなのですね。
それが分かって納得しました。
「\n」と「$」は基本的に一緒に使わないのですが、
「[^X]」には「\n」が含まれるので、
うっかり置換で使ってしまって全部一行になって
びっくりすることが何度かあったので、
質問させていただきました。
(「[^X\n」にすればよいのですが)


追伸
ヘルプの「$」のところに、
「\n」と組み合わせるとややこしい…旨のコメントが
あったほうがいいかもしれないですね。



[ ]
RE:22688 正規表現「$」と改行No.22695
秀丸担当 さん 07/03/07 12:51
 

>追伸
>ヘルプの「$」のところに、
>「\n」と組み合わせるとややこしい…旨のコメントが
>あったほうがいいかもしれないですね。

ヘルプにはキャラクタクラスと行末のほうに注意書きを書いておこうと思います。

[ ]
RE:22695 正規表現「$」と改行No.22698
K'zawa さん 07/03/07 14:01
 
秀丸担当さん、こんにちは。
K'zawaです。

>ヘルプにはキャラクタクラスと行末のほうに注意書きを書いておこうと思います。

ありがとうございます。
よろしくお願いします。

[ ]
RE:22695 正規表現「$」と改行No.22705
Iranoan さん 07/03/08 19:27
 
 秀丸担当さん今日は、Iranoan です。
> ヘルプにはキャラクタクラスと行末のほうに注意書きを書いておこうと思います。
 Ver.6.50β26 で
> [^A\n]$ または [^A\n]\n と書いたほうがいいです。
と追加されているのを確認したのですが、後者はファイル終端がヒットしませ
ん。例としては不適当ではないでしょうか?

[ ]
RE:22705 正規表現「$」と改行No.22706
秀丸担当 さん 07/03/09 10:07
 

>と追加されているのを確認したのですが、後者はファイル終端がヒットしませ
>ん。例としては不適当ではないでしょうか?

そうですね。消しておきます。
というか後者は改行文字にもヒットするので意味が無かったです。

[ ]
RE:22706 正規表現「$」と改行No.22710
Iranoan さん 07/03/09 18:49
 
 秀丸担当さん今日は、Iranoan です。
> >と追加されているのを確認したのですが、後者はファイル終端がヒットしませ
> >ん。例としては不適当ではないでしょうか?
>
> そうですね。消しておきます。
 宜しくお願いします。

[ ]