当我将preg_split与
一起使用时/['\"][^'\"\\\\]*(?:\\\\,[^'\"\\\\]*)*['\"](*SKIP)(?!)|\,/
为
max(min(2, 3, 5, 19, 5), 2)
其分裂方式
[0] => min(2
[1] => 3
[2] => 5
[3] => 19
[4] => 5)
[5] => 2
我要选择非括号和非引号逗号。 所以:
[0] => min(2, 3, 5, 19, 5)
[1] => 2
答案 0 :(得分:1)
同意为此使用非正则表达式方法,因为这样会很快变得笨拙。但是,如果您好奇,请继续阅读。
从技术上讲,您要查找的逗号 在括号中,并括在max()
中。如果您只想查看单个顶级函数,则可以使用以下代码:
(?:^max\\(|(([\'\"])(?:\\\\.|(?!\\g{-1}).)*+\\g{-1})|\\((\\\\.|(?1)|[^()\'\"]|\\((?-1)*+\\))*+\\))(*SKIP)(?!)|,
演示:https://regex101.com/r/O7kFRc/1
如果可以存在其他顶级功能,例如max(a, b) + min(c, d)
,则必须使用其他方法。但是现在还不需要打开蠕虫的罐头。