正規表現の空行検索に関してNo.24854
EXZS さん 08/05/02 23:58
 
マクロの置換で改行だけの空行を正規表現の

replacedown "^\\n\\f[^<].+", "\\0<P>\\1", regular;

の様な感じで置換しておりますが、これが空行の次の文字によって
振る舞いが異なります。

半角スペース1個ではヒットせず、半角スペース2個、3個では
ヒットします。
これらの検索結果の違いというのはどこからきているのでしょうか?

環境はWindowsXP SP2, 秀丸ver7.09β2です

[ ]
RE:24854 正規表現の空行検索に関してNo.24855
K'zawa さん 08/05/03 01:12
 
EXZSさん、こんにちは。
K'zawa/ユーザーです。

>replacedown "^\\n\\f[^<].+", "\\0<P>\\1", regular;
>
>の様な感じで置換しておりますが、これが空行の次の文字によって
>振る舞いが異なります。
>
>半角スペース1個ではヒットせず、半角スペース2個、3個では
>ヒットします。
>これらの検索結果の違いというのはどこからきているのでしょうか?

「[^<].+」の部分が最低2文字必要だからじゃないですか?
秀丸の「.」は改行を含みません。
だから「+」を「*」にすればいいのですが、
このケースでは「^\\n\\f[^<]」で十分な気がしますけど。

[ ]
RE:24855 正規表現の空行検索に関してNo.24857
EXZS さん 08/05/03 22:54
 
>EXZSさん、こんにちは。
>K'zawa/ユーザーです。
>
>>replacedown "^\\n\\f[^<].+", "\\0<P>\\1", regular;
>>
>>の様な感じで置換しておりますが、これが空行の次の文字によって
>>振る舞いが異なります。
>>
>>半角スペース1個ではヒットせず、半角スペース2個、3個では
>>ヒットします。
>>これらの検索結果の違いというのはどこからきているのでしょうか?
>
>「[^<].+」の部分が最低2文字必要だからじゃないですか?
>秀丸の「.」は改行を含みません。
>だから「+」を「*」にすればいいのですが、
>このケースでは「^\\n\\f[^<]」で十分な気がしますけど。

確かに2文字必要なのは理解しました。
でも、実際には空行の次の先頭文字が"<"の場合は除外したいん
ですけど、「^\\n\\f[^<]」だと除外されずにヒットされるんですよね。なので"^\\n
\\f[^<].+"とした記憶があります。

ということで本来の質問は「^\\n\\f[^<]」で
次の行の先頭が"<"でない空行をヒットさせる正規表現かもしれません




[ ]
RE:24857 正規表現の空行検索に関してNo.24858
アルビレオ さん 08/05/04 01:23
 
ユーザーのアルビレオです。

>確かに2文字必要なのは理解しました。
>でも、実際には空行の次の先頭文字が"<"の場合は除外したいん
>ですけど、「^\\n\\f[^<]」だと除外されずにヒットされるんですよね。なので"^\\n
>\\f[^<].+"とした記憶があります。

こちらで試してみるとちゃんと先頭が < の行は除外されましたよ。
でも次の行が空行のものにもヒットしています。
どうも [^<] にマッチする文字として次の行の \n も含まれてしまうようです。

>ということで本来の質問は「^\\n\\f[^<]」で
>次の行の先頭が"<"でない空行をヒットさせる正規表現かもしれません

たぶん正確には「空行の次の行の先頭が"<"でなく、空行でもない」ではないで
しょうか。
^\\n\\f[^<\\n].*
だとうまくいくみたいです。

[ ]
RE:24858 正規表現の空行検索に関してNo.24862
EXZS さん 08/05/04 23:52
 
>
>たぶん正確には「空行の次の行の先頭が"<"でなく、空行でもない」ではないで
>しょうか。
>^\\n\\f[^<\\n].*
>だとうまくいくみたいです。

その通りです。試したら上手くいった感じです。
ありがとうございました。

[ ]