2016-02-26 25 views
0

比方说,我有PHP正则表达式的preg_match从一个特定的函数名参数

$funcName = 'FooBar'; 
$myFuncString = $funcName.'("Arg1, Arg2")'; 

我怎么能preg_match()所以返回"Arg1, Arg2"(带双引号,并且不$funcName

我曾尝试:?

$pattern = '/(?:'.$funcName.'|\".*?)\"/'; 
preg_match($pattern, myFuncString, $matches); 

即使返回不符。有什么建议么?

+1

什么是捕获'preg_match'店的第三个参数。 – chris85

+0

@ chris85感谢您的评论。编辑问题 – Wistar

+0

所以你想在字符串中匹配'$ funcName'?你当前的正则表达式在那里有一个'或'。您还正在使用非捕获组,但我认为您确实希望捕获这部分内容。 – chris85

回答

1

这应该工作:

$funcName = 'FooBar'; 
$myFuncString = $funcName.'("Arg1, Arg2")'; 

//$funcName = 'NooBar'; 
$pattern = '/'.$funcName.'\("(.*)"\)/'; 
$matches = preg_match($pattern, $myFuncString, $res); 

echo $res[1]; 

我不得不添加$res到具有结果的preg_match和纠正模式。

演示:http://sandbox.onlinephpfunctions.com/code/6de9d1236b82339199a2c64e914b5ca5b80e4e77

+0

谢谢。它返回'[[0] => FooBar(“Arg1,Arg2”)[1] => Arg1,Arg2]',怎么才能得到双引号(''“Arg1,Arg2”'')的参数,而不是函数名? – Wistar

+0

你应该让'。*'不要贪婪。如果在这行后面有'')',它会匹配到最后一次出现。 – chris85

+0

@Wistar你回应'$ res [1]'。@ chris85这是一个很好的建议,我的代码假设没有了'()'。我唯一一次看到这是在缩小/编码的PHP文件。 –