1

Perl 正規表現検索を使用して、末尾が次のファイルを見つけるにはどうすればよいですか。

-------\r\n<eof>

16 進数では、次のとおりです。

2D 2D 2D 2D 0D 0A (the end of the file)

私は、Boost Perl regex 構文を使用していると言う UltraEdit を使用しています。

私は使用するのに十分なことを理解しました:

----\x0d\x0a

私が欲しい行を見つけますが、ファイルの最後にない他の何百もの行の中だけです:

whatever
------------     <- matches this also, which I don't want!
whatever
------------     <- matches this also, which I don't want!
whatever
4

3 に答える 3

2

UltraEdit の正規表現エンジンは、行ベースで機能します。これは、とりわけ、行末とファイルの終わりを区別しないことを意味します。

\z文字列マーカーまたは文字列終了マーカーも認識しません\Z。また、UE では次のような否定的な先読みアサーションは-----\r\n(?!.)機能しません。

したがって、UE の正規表現エンジンでは、ここで問題が発生します。あなたができることは、マクロを使用することです:

InsertMode
ColumnModeOff
HexOff
Key Ctrl+END
Key UP ARROW
PerlReOn
Find RegExp "-----\r\n"
IfFound
# Now do whatever you wanted to do...
EndIf

UE にそれをすべてのファイルに適用させます。

于 2011-02-02T20:03:45.350 に答える
0

ファイル内のすべての行を繰り返し処理し、正規表現を使用する必要がありますか? そうでない場合はseek、ファイル内の必要な場所に移動して、文字列が等しいかどうかを確認します。

open my $fh, '<', $the_file;
seek $fh, 2, -6;            # seek to the end of file minus 6 bytes
read $fh, my $x, 6;         # read 6 bytes into $x
if ($x eq "----\r\n") {
    print "The end of file matches ----\\x0d\\x0a\n";
} else {
    print "The end of file doesn't match ----\\x0d\\x0a\n";
}
于 2011-02-02T20:11:10.083 に答える
0

UltraEdit JavaScript を使用してこれを行う 1 つの方法を次に示します。

UltraEdit.activeDocument.bottom(); でファイルの最後に移動します。UltraEdit.activeDocument.currentPos(); を使用します。現在位置を保存します。

「\r\n」を逆方向に検索します。ここでも、UltraEdit.activeDocument.currentPos(); を使用します。結果を前の位置と比較して、これが実際にファイルの末尾にある cr/lf であるかどうかを判断します。

これらの文字の位置に基づいて、考えていた置換/挿入を実行するか、結果を通知するメッセージ ボックスを表示します。

于 2012-12-19T18:01:29.017 に答える