【问题标题】:Using Sublime's regex search/replace with \Z使用 Sublime 的正则表达式搜索/替换为 \Z
【发布时间】:2016-12-01 11:29:29
【问题描述】:

Sublime 似乎认为 \Z 与文件的实际结尾匹配,
并且每个 \n 都指向它。

这是 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-tag 的内容仍然可以。
编辑:
帖子本身的实际格式有效,
但是帖子的预览中的格式混乱了(显示在编辑框下方)。
))

eg1 - \n 最后:1

原文:

x1
X
X
X

实际:

x1
X
X
xy
是的

预期:

x1
X
X
X
是的

eg2 - \n 最后:2

原文:

x2
X
X
X

实际:

x2
X
X
xy
是的
是的

预期:

x2
X
X
X

是的

eg3 - \n 最后:3

原文:

x3
X
X
X


实际:

x3
X
X
xy
是的
是的
是的

预期:

x3
X
X
X


是的

【问题讨论】:

  • 好吧,\z --> y 替换是否按预期工作?
  • @WiktorStribiżew 是的,这得到了我预期的结果(即,与上述每个示例的 expected 预块相同)。但是\Z 应该 可以正常工作吗?
  • \Z 也匹配文档中最后一个换行符之前。
  • 所以......按照那个描述......你的意思是\Z-->y应该在所有情况下插入一个single y,只是之前最后的\n??
  • 看看我的回答,我找到了对 Boost 正则表达式语法的确切引用。关键是 PCRE 和 Boost 在许多方面都有点不同(Python re 除外)\Z 匹配字符串的末尾或最后的换行符。 Boost 似乎是另一个例外。

标签: regex replace editor sublimetext2 sublimetext


【解决方案1】:

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

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

\Z 可以在结尾的可选换行数之前匹配,请参阅this Boost regex reference

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

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

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

【讨论】:

  • 谢谢!我刚刚发现了 regex101.com 并在那里测试了 \Z\z,是的,我想我现在明白了。在我刚刚遇到的实际具体实际环境中,我首先想要的是 prolly \z,我以前从来不需要研究区别。
猜你喜欢
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多