使用升华';s regex搜索/替换为\Z

使用升华';s regex搜索/替换为\Z,regex,replace,editor,sublimetext2,sublimetext,Regex,Replace,Editor,Sublimetext2,Sublimetext,Sublime似乎认为\Z与文件的实际结尾相匹配, 以及它前面的每个\n 这是Sublime中的错误吗 (意思是崇高或它所使用的东西), 还是正确的行为 我只是对它应该如何工作感到困惑 以下是一个简化的具体演示: 这是搜索替换: Find What:\Z Replace With:y 以下是4个egs,包括: - the original file contents - the actual result - my expected result eg0-

Sublime似乎认为
\Z
与文件的实际结尾相匹配,
以及它前面的每个
\n

这是Sublime中的错误吗
(意思是崇高或它所使用的东西),
还是正确的行为
我只是对它应该如何工作感到困惑

以下是一个简化的具体演示:

这是搜索替换:

   Find What:\Z
Replace With:y
以下是4个egs,包括:

    - the original file contents
    - the actual   result
    - my  expected result
eg0-
\n
结尾处:0 (如我所料。)

原件:

x0 x x x x1 x x x x2 x x x x3 x x x 实际:

x0 x x xy x1 x x xy y x2 x x xy y y x3 x x xy y y y 实际:

x0 x x xy x1 x x xy y x2 x x xy y y x3 x x xy y y y 实际:

x0 x x xy x1 x x xy y x2 x x xy y y x3 x x xy y y y x3 x x xy Y Y Y 预期:

x0 x x xy x1 x x x y x2 x x x y x3 x x x y x3 x x x
首先,值得注意的是,Sublime文本在搜索和替换功能中使用了Boost regex引擎

为了获得您期望的行为,您需要使用与字符串/文档的末尾相匹配的锚定

\Z
可以在末尾的可选换行数之前匹配,请参见:

\z
仅在缓冲区末尾匹配(与
\\\'
相同)

\Z
匹配由缓冲区末尾的可选换行序列组成的零宽度断言:等价于正则表达式
(?=\v*\Z)
请注意,这与Perl略有不同,Perl的行为就像匹配
(?=\n?\z)


因此,这不是bug,这是锚定的预期行为。

好吧,按预期进行替换工作。@WiktorStribiżew Yes,得到了我预期的结果(即,与上述每个eg的
预期
预块相同)。但是
\Z
应该像它那样工作吗?
\Z
在文档的最后一行之前也匹配。所以。。。根据这个描述。。。你的意思是
\Z
-->
y
在所有情况下都应该插入一个
y
,就在最后一个
\n?
之前。看看我的答案,我找到了Boost regex语法的确切引用。关键是PCRE和Boost有点不同,有很多不同的风格(Python中除外
re
\Z
匹配字符串末尾或最后一个换行符。Boost似乎是另一个例外。谢谢!我刚刚发现了regex101.com并在那里测试了vs,是的,我想我现在明白了。在我刚刚遇到的实际环境中,我首先想要的是prolly
\z
,我以前从未研究过这种区别。