如何使用Perl正则表达式搜索查找以:
结尾的文件-------\r\n<eof>
在十六进制中,这是:
2D 2D 2D 2D 0D 0A (the end of the file)
我在UltraEdit中,它说它使用Boost Perl正则表达式语法。
我已经想到了足够的用法:
----\x0d\x0a
确实可以找到我想要的行,但只能找到不在文件末尾的数百个其他行:
whatever
------------ <- matches this also, which I don't want!
whatever
------------ <- matches this also, which I don't want!
whatever
答案 0 :(得分:2)
UltraEdit的正则表达式引擎以基于行的方式工作。这意味着它不会区分行尾和文件结束。
它也不知道\z
或\Z
字符串结束标记。此外,像-----\r\n(?!.)
这样的负前瞻性断言在UE中不起作用。
所以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将其应用于您的所有文件。
答案 1 :(得分: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";
}
答案 2 :(得分:0)
以下是使用UltraEdit JavaScript进行此操作的一种方法。
使用UltraEdit.activeDocument.bottom()转到文件的底部; 使用UltraEdit.activeDocument.currentPos();存储您当前的位置。
向后搜索“\ r \ n” 再次,使用UltraEdit.activeDocument.currentPos();并将结果与之前的位置进行比较,以确定这是否实际上是文件末尾的cr / lf。
根据这些角色位置做任何替换/插入,或者抛出一个宣布结果的消息框。