【问题标题】:Non Greedy Regex from Left左侧的非贪婪正则表达式
【发布时间】:2014-12-22 18:13:39
【问题描述】:

我有这样的字符串:

\24s904dS\24sr4d2\24x\\y\\12z:234F\\3dRl\24o980\24

我只想匹配粗体部分:

x\\y\\12z:234F\\3dRl

我可以用这个正则表达式来处理不贪心的部分:

\\24(.*:.*?)\\24

但仍然不知道如何处理左部分的非贪婪。

【问题讨论】:

    标签: regex non-greedy


    【解决方案1】:

    如下修改你的模式

    .*\\24(.*:.*?)\\24
    

    【讨论】:

      【解决方案2】:

      您可以使用这个基于负前瞻的正则​​表达式:

      \\24((?:.(?!\\24))*:.*?)\\24
      

      RegEx Demo

      重要的部分是这个基于前瞻的正则表达式模式(?:.(?!\\24))*,这意味着如果不遵循\24,则匹配一个字符。这基本上确保了最相邻的左侧 \24 匹配。

      输出匹配:

      x\\y\\12z:234F\\3dRl
      

      【讨论】:

      • ?: 实际上是一个非捕获组。
      • 是的,它有效,非常感谢。现在我很困惑我应该在 alpha bravo 和你的之间选择哪个答案。无论如何,我最终还是使用了 alpha bravo 的答案,但你的答案仍然是正确的。
      • 您可以通过 2 个演示了解 2 种方法之间的区别。 My approach: Demo1bravo's approach: Demo2。您可以在我的正则表达式中清楚地看到,您可以在任一侧捕获由\24 包围的匹配项,但不能在其他方法中捕获。
      【解决方案3】:

      与其修改贪心,不如只写一个更精确的正则表达式:

      \\24([a-zA-Z0-9]+:[a-zA-Z0-9]+)\\24
      

      (相对而言,非贪婪修饰符确实是解决问题的最佳方法。)

      【讨论】:

      • 字符串中也可以有“\\”(我已经编辑了我的问题)。
      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2011-04-27
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多