用于处理递归参数的正则表达式

时间:2010-03-12 06:50:26

标签: php regex

我是一名正则表达式新手,所以我想知道以下内容的正则表达式:

  

function {function arg1,arg2},arg3

我希望能够选择顶级参数:{function arg1,arg2}& ARG3

理想情况下,响应将在PHP中使用preg_match,但几乎任何正则表达式都可以正常工作。

谢谢! 马特

1 个答案:

答案 0 :(得分:0)

PCRE / Perl正则表达式,但我只想猜你想要什么(取决于下面的规格):

/(?:function\s+|\G(?<!^),\s*)([^,{}]+|\{function\s+(?1)\s*(?:,\s*(?1)\s*)*})\s*/g

示例 Perl使用:

test('function {function arg1, arg2}, arg3');
test('function foo, {function {function x}, y}, bar');

sub test{
    print 'Matched: "', join '", "',
        $_[0] =~
        /(?:function\s+|\G(?<!^),\s*)
        (
            [^,{}]+
            |
            \{function\s+(?1)\s*(?:,\s*(?1)\s*)*}
        )
        \s*/gx;
    print "\"\n";
}

<强>输出

Matched: "{function arg1, arg2}", "arg3"
Matched: "foo", "{function {function x}, y}", "bar"

PHP 中应该可以正常工作,只需在需要的地方转义并与preg_match_all一起使用。

关于规范的许多问题:

  • 您匹配的字符串是否包含除此之外的其他内容?
  • 总是有两个论点吗?
  • 参数只有一个字吗?
  • “function”是关键字还是函数名?

请更多(真实)示例!