使用Sublime的正则表达式搜索/替换为\ Z.

时间:2016-07-27 12:37:42

标签: regex replace editor sublimetext2 sublimetext

Sublime似乎认为\Z匹配文件的实际结尾,
每个\n导致它。

这是Sublime中的一个错误吗 (意思是,Sublime或它正在使用的东西),
或者是正确的行为
而我只是对 应该如何工作感到困惑?

这是一个简化的具体演示:

这是搜索替换:

   Find What:\Z
Replace With:y

以下是4个例子:

    - the original file contents
    - the actual   result
    - my  expected result
最后

eg0 - \n:0

(按我的预期工作。)

原:

x0
x
x
x

实际:

x0
x
x
xy

预期:

x0
x
x
xy

((
Stackexchange格式化在这里混乱,
并开始忽略#.*行,
而且我不知道如何解决它,
pre - 标签内容仍然正常 修改
帖子本身的实际格式有效,
但是格式在帖子的预览中显示出来(显示在编辑框下方)。
))

最后

eg1 - \n:1

原:

x1
x
x
x

实际:

x1
x
x
xy
y

预期:

x1
x
x
x
y
最后

eg2 - \n:2

原:

x2
x
x
x

实际:

x2
x
x
xy
y
y

预期:

x2
x
x
x

y

eg3 - \n在最后:3

原:

x3
x
x
x


实际:

x3
x
x
xy
y
y
y

预期:

x3
x
x
x


y

1 个答案:

答案 0 :(得分:2)

首先,值得注意的是Sublime Text在搜索和替换功能中使用Boost正则表达式引擎。

为了获得您期望的行为,您需要使用匹配字符串/文档末尾\z锚点。

\Z可以在最后的可选新行数之前匹配,请参阅this Boost regex reference

  

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

     

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

所以,这不是错误,它是\Z锚点的预期行为。