2016-02-26 24 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文件。 –