如何在PHP中用正则表达式解析函数参数字符串

如何在PHP中用正则表达式解析函数参数字符串,php,regex,Php,Regex,我试图处理Java或PHP等参数,并使用正则表达式解析变量数(和类型)的参数。例如,函数可能是: util.echo(5, "Hello, world!"); 在本例中,我希望将5作为第一个参数,将“Hello,world!”作为第二个参数(不带引号)。我目前所做的是用逗号分解,但如果字符串参数包含逗号,则会出现问题。我对正则表达式没有太多的经验,但我认为它可以忽略引号中的逗号 (“,(?=(?:[^\“]*”[^\“]*”[^\“]*”*[^\“]*$)“)中的正则表达式似乎可以工作,但我对

我试图处理Java或PHP等参数,并使用正则表达式解析变量数(和类型)的参数。例如,函数可能是:

util.echo(5, "Hello, world!");
在本例中,我希望将5作为第一个参数,将“Hello,world!”作为第二个参数(不带引号)。我目前所做的是用逗号分解,但如果字符串参数包含逗号,则会出现问题。我对正则表达式没有太多的经验,但我认为它可以忽略引号中的逗号


“,(?=(?:[^\“]*”[^\“]*”[^\“]*”*[^\“]*$)“
)中的正则表达式似乎可以工作,但我对如何用PHP实现它感到困惑。

要在字符串上测试正则表达式,可以在PHP中使用
preg\u match()
函数

/$matches将输出匹配项
预匹配(“/,(?=(?:[^\“]*\”[^\“]*\”*[^\“]*”*[^\“]*$)/”,$待检查,$匹配);
如果($匹配){
var_dump($matches);
//有一场比赛!
}否则{
//正则表达式未找到任何模式匹配
}
如果您不需要访问精确匹配,只要存在至少一个模式匹配,您就可以简单地执行以下操作:

if(preg\u match(“/,(?=(?:[^\”]*\“[^\”]*\”*[^\”]*\”*)/“,$待检查)){
//有一场比赛!
}否则{
//正则表达式未找到任何模式匹配
}

感谢Zac和第四只鸟!有效的示例解决方案,供将来参考:

$parameters = 'util.echo(5, "Hello, world!");';

preg_match_all('/(?:[^\s(]+\(|\G(?!^),\s*)\K(?:"[^"]*"|[^,()]+)(?=[^()]*\);)/', $parameters, $matches);
if($matches){
    var_dump($matches[0]);
} else {
    echo('No matches.');
}

尝试
(?:[^\s(+]+\(|\G(?!^),\s*)\K(?:“[^”]*”[^,()]+)(?=[^()]*\)
获得单独的匹配,请查看您链接的问题中的答案,这是一个坏主意,原因有很多(效率、天真的方法,一点都不强)。不要试图找到“好的”逗号,尝试描述不同的可能参数。通常,不要尝试拆分,尝试描述。