我是一个正则表达式新手,所以我想知道什么是正则表达式为以下几点:正则表达式处理递归参数
功能{功能ARG1,ARG2},ARG3
我m看起来能够只选择顶级参数:{function arg1,arg2} & arg3
理想情况下,响应将使用PHP中的preg_match,但几乎所有的正则表达式都可以正常工作。
谢谢! 马特
我是一个正则表达式新手,所以我想知道什么是正则表达式为以下几点:正则表达式处理递归参数
功能{功能ARG1,ARG2},ARG3
我m看起来能够只选择顶级参数:{function arg1,arg2} & arg3
理想情况下,响应将使用PHP中的preg_match,但几乎所有的正则表达式都可以正常工作。
谢谢! 马特
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即可。
许多有关规范寿的问题:
请更多(真实)例子!
这是您需要的最普通的功能形式吗?在内部函数中总是有两个参数? – Jens 2010-03-12 07:06:53
如果你在参数('function ... {function ... {function ...} ...}})中允许任意深度的函数,那么你的语言是不规则的,你不能用正则表达式来解析它。 – Gumbo 2010-03-12 07:09:55
使用pcre的递归模式语法可以_test_语句。但是,最大数量的捕获是在编译时确定的,也就是说,您可以获取第一个顶级参数+完整尾部或第一个和最后一个顶级参数(不是很有用)因为之后的提取会覆盖先前提取的相同捕获)。 – VolkerK 2010-03-12 08:04:37