【问题标题】:Regex problems in TextMateTextMate 中的正则表达式问题
【发布时间】:2014-07-02 12:36:00
【问题描述】:

正则表达式对我来说是新的(但它们很棒而且有用:D)。但是,在尝试在 TextMate 中使用它们之后,我得到了意想不到的结果。我不确定这是一个错误还是正则表达式的工作原理。

我有这个代码

begin text in the middle end and more text and a
second begin second text in the middle end

使用begin.+end 搜索我希望得到两个结果

  1. begin text in the middle end
  2. begin second text in the middle end

但我选择了整个文本;我希望 begin.+end 搜索 .+ 直到找到第一个 end,但它会搜索到最后一个。

这就是他们的工作方式吗?我在哪里可以学习如何使用正则表达式?

事实上,我有兴趣只选择内部 .+ 而不选择 beginend,但这是另一个问题。

【问题讨论】:

    标签: regex textmate oniguruma


    【解决方案1】:

    使用下面的正则表达式获取开始和结束之间的字符串,

    (?<=begin).+?(?=end)
    

    DEMO

    说明:

    • (?&lt;=begin) 正向后视用于在特定模式之后进行匹配。在这种情况下,正则表达式引擎在开始之后设置匹配标记。
    • .+? 匹配一个或多个字符。? 使正则表达式不贪婪,因此会产生最短匹配。
    • (?=end) 一旦找到字符串end,正则表达式引擎就会停止匹配。从而为您提供开始和结束之间的字符。

    【讨论】:

    • 关键是.+? ;) 剩下的只是我需要学习的东西。
    • @Manuel 为 .+? 添加了 exp
    • 通过在此演示中添加和删除 ? regex101.com/r/oX4qT1/3 查看差异
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多