2014-01-08 45 views
3

我想使用正则表达式分析字符串中的PHP变量。例如,preg_match_all不返回任何在输出数组

$str = '$str1var ="str1"; $str2var = "str2"'; 

会给我一个数组[ 'str1var', 'str2var']

在PHP我的正则表达式是: “/\$(.*?)=/s”

$pattern = "/\$(.*?)=/s"; 
preg_match_all($pattern, $str, $output_array); 

但preg_match_all返回0(不匹配) 我的正则表达式有什么问题?我在像http://www.phpliveregex.com/这样的网站上测试过,它工作正常,但我的服务器返回0;

我的服务器PHP版本5.1.6是

+1

似乎在这里工作。但PHP 5.1.6是古老的。你有版本选择吗? http://preg_match.onlinephpfunctions.com/ – JakeGould

+0

它返回0还是false? var_dump应该告诉你...正则表达式应该工作tohugh,虽然输出应该更像['str1var','str2var'] – Rooster

回答

3

PHP似乎与周围的模式的双引号,也许它正在寻找,因为$标志的变量的问题。

您的代码不any php version工作,但单引号它在所有的PHP版本,请example

$pattern = '/\$(.*?)=/s'; 
+0

这固定它。谢谢。我也刚刚意识到(根据@JakeGould的回答)将我的模式修改为“/\\$(.*?)=/s”也适用。 –

+0

@StephaniAlves'var_dump($ pattern);' - >'$(。*?)=/s',你会发现,如果$'是为正则表达式转义的。它必须为正则表达式引擎转义,因为它是[元字符](http://www.php.net/manual/en/regexp.reference.meta.php),并且你想匹配文字。 –

+0

@ Jonny5谢谢。真的很有帮助。 –

1

变量在PHP双引号内的解析。

0
$pattern = '/\$(?P<variable>.*?)(?:\s|)=(?:\s|)"(?P<value>.*?)"/'; 

如果您需要,返回值为关联数组。