代码之家  ›  专栏  ›  技术社区  ›  fronthem

如何匹配递归模式“a(?R)b”,包括另一个字符串,例如“test{aaabbb}”?(Regex)

  •  0
  • fronthem  · 技术社区  · 10 年前

    根据 this post ,如果字符串不简单,如何使用递归模式

    aaaaabbbbb
    aabb
    aaabbb
    

    但它们包括另一文本,例如。

    test{aaaaabbbbb}
    test{aabb}
    test{aaabbb}
    

    这里我想匹配递归模式,包括 test{...} .

    对于正则表达式: test\{a(?R)*b\} 不应该工作。

    注意,我更喜欢PCRE形式的正则表达式

    2 回复  |  直到 8 年前
        1
  •  3
  •   Wiktor Stribiżew    10 年前

    您需要更换 recursive regex 具有 subroutine call :

    test\{(a(?1)*b)\}
    

    看见 demo

    这些与正则表达式递归非常相似。子例程调用只匹配捕获组中的正则表达式,而不是再次匹配整个正则表达式。您可以从正则表达式中的任何位置对任何捕获组进行子例程调用。如果在它所调用的组内进行调用,则会有一个递归捕获组。

    此外,请检查 Matching Balanced Constructs 部分

        2
  •  0
  •   Eder    10 年前

    当然,您需要使用 命名子程序调用 为了避免回避以影响整个表达,

    如。 test\{(?<x>a(?&x)?b)\}