什么是链式函数的正则表达式模式?

时间:2016-08-31 05:46:42

标签: regex pattern-matching

我尝试了各种组合,但在确定正确的正则表达式模式时没有用。

基本上我想捕捉以下示例的模式:

  1. {{可变}}
  2. {{{variable.function1参数1}}}
  3. {{{variable.function1参数1} .function2 {参数}}}
  4. 依旧......

    我想从中捕获变量,function1,param1,function2,param2

    到目前为止,我的下面的正则表达式完全不起作用

    \{\{([^{}.]+)(\.([^{}]+)\{([^{}]+)\})*\}\}
    

    如果我尝试在示例3中应用上述模式,则会出现以下群组

    • 组#1 - 变量
    • 第2组 - .function2 {param2}
    • 第3组 - 功能2
    • 第4组 - param2

    我期待如下所示,

    • 组#1 - 变量
    • 第2组 - .function1 {param1}
    • 第3组 - 功能1
    • 第4组 - param1
    • 第5组 - .function2 {param2}
    • 第6组 - 功能2
    • 第7组 - param2

    PS:您无需在http://regexr.com/3e4st

    编写代码即可查看

2 个答案:

答案 0 :(得分:1)

好的,所以你的东西不起作用的原因是因为你基本上只捕获一般事物的一个实例,这意味着每个捕获组只能返回你想要的一个实例。因此,所需要的是全局变量或您使用的任何语言的等效变量。

示例:https://regex101.com/r/pO8xN2/3

答案 1 :(得分:1)

正则表达式匹配中的组数是固定的。请参阅older post of mine并提供更多说明。在你的情况下,这个数字是4。

当一个组重复匹配时,通常只能访问字符串中最后一个匹配项的值。这就是您对问题的看法:function2param2

某些正则表达式引擎允许访问以前的组捕获(例如the one in .NET)。大多数人没有。是否可以轻松解决您的问题或者不严格取决于您的正则表达式引擎。