Sublime Text“视图”末尾的正则表达式匹配

6
我设计了以下正则表达式,它应该能够给出view中倒数第二个 } 之前的所有文本:
region = currentView.find("(?<=\\})[^\\}]+\\}[^\\}]*$", 0)

Sublime Text似乎不认为$表示“视图中任何内容的结尾”。坦率地说,我不太理解Sublime Text认为它表示什么。
我的正则表达式似乎有效,如此在regexr.com中所示。
我找到了一个可行的解决方法来应对我的特定情况,目前我可以接受这种解决方法。
regions = currentView.find_all("\}")
    if len(regions) > 1:
        # stuff I am doing with regions[-2] goes here

但我想知道是否可以匹配视图内容的结尾。


在正则表达式中,$ 表示“字符串的结尾”。那么你的视图结束是否也是字符串的结尾呢? - HamZa
我对Sublime Text如何实现其缓冲区不够了解。我猜我正在寻找的是一个“缓冲区末尾”,而我假设“字符串末尾”会起作用... - DudeOnRock
如果你想构建一个正则表达式,你需要知道一些你期望的输入。然后你可以详细说明一个模式。所以你能提供一些输入吗?另外我似乎不明白为什么你要使用 \\}?如果你想匹配一个字面上的 },那么 \} 不就足够了吗? - HamZa
@HamZa:我在链接regexr.com中提供了一个示例,出于整洁和清晰的原因,我不想在实际问题主体中混淆它,因为我的问题 似乎 是Sublime的API而不是实际的正则表达式。上述正则表达式以Python字符串的形式呈现,需要对 / 符号进行转义。 - DudeOnRock
1个回答

12

$ 在正则表达式的末尾,根据引擎和修改器标志的不同含义可能是行尾或输入末尾。快速查看 Sublime 的文档显示,它支持\z边界,意思是“输入缓冲区的末尾”。所以尝试使用\z替换最后的$,看看是否有帮助。


太棒了!它完全符合我的要求。我可以问一下,在Sublime的文档中你是在哪里找到这个答案的吗?我自己也很详细地查看过那里! - DudeOnRock
4
在Sublime的文档中,最后一句话提到了Boost语法。然后,在Boost的文档中,我们可以找到:Buffer Bundaries。这个链接是:http://www.boost.org/doc/libs/1_47_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.buffer_boundaries - James
请注意,对应Sublime文档的地址已更改,请参见Sublime文本社区文档 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接