选择非括号和非引号逗号

时间:2018-12-11 05:21:48

标签: php regex

当我将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

1 个答案:

答案 0 :(得分:1)

同意为此使用非正则表达式方法,因为这样会很快变得笨拙。但是,如果您好奇,请继续阅读。

从技术上讲,您要查找的逗号 在括号中,并括在max()中。如果您只想查看单个顶级函数,则可以使用以下代码:

(?:^max\\(|(([\'\"])(?:\\\\.|(?!\\g{-1}).)*+\\g{-1})|\\((\\\\.|(?1)|[^()\'\"]|\\((?-1)*+\\))*+\\))(*SKIP)(?!)|,

演示:https://regex101.com/r/O7kFRc/1

如果可以存在其他顶级功能,例如max(a, b) + min(c, d),则必须使用其他方法。但是现在还不需要打开蠕虫的罐头。