Php preg_match_all在输出数组中不返回任何值

Php preg_match_all在输出数组中不返回任何值,php,regex,preg-match-all,Php,Regex,Preg Match All,我试图用正则表达式解析字符串中的php变量。比如说, $str = '$str1var ="str1"; $str2var = "str2"'; 会给我一个数组['str1var','str2var'] 我的php正则表达式模式是:“/\$(.*?)=/s” 但是preg_match_all返回0(无匹配) 我的正则表达式怎么了?我在一个类似的网站上进行了测试,效果很好,但我的服务器返回0 我的服务器PHP版本是5.1.6PHP似乎对围绕模式的双引号有问题,可能是因为$符号,它正在寻找一个变量

我试图用正则表达式解析字符串中的php变量。比如说,

$str = '$str1var ="str1"; $str2var = "str2"';
会给我一个数组['str1var','str2var']

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

但是preg_match_all返回0(无匹配) 我的正则表达式怎么了?我在一个类似的网站上进行了测试,效果很好,但我的服务器返回0


我的服务器PHP版本是5.1.6

PHP似乎对围绕模式的双引号有问题,可能是因为
$
符号,它正在寻找一个变量

您的代码在中不起作用,但在所有php版本中都使用单引号,请参见:


在PHP中,变量在双引号内进行解析。

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

如果需要,返回具有该值的关联数组

似乎在这里工作。但是PHP5.1.6是很古老的。你有选择的版本吗?它返回0还是false?var_dump应该告诉你。。。正则表达式应该可以工作到hugh,尽管输出应该更像['str1var','str2var'],这就解决了它。谢谢我还刚刚意识到(根据@JakeGould的回答),将我的模式修改为“/\\$(.*?)=/s”也可以。@StephaniAlves
var\u dump($pattern)
->
$(.*?=/s
,您可以看到,如果对regex转义了
$
。它必须为正则表达式引擎转义,因为它是一个,您希望与文字匹配。@Jonny5谢谢。真的很有帮助。@StephaniAlves:小心点,如果使用单引号或双引号,那么在简单字符串(不是正则表达式模式)中获得文字反斜杠所需的反斜杠数是不一样的。因此,如果您想在带有单引号的模式中获得转义的
$
,您只需要一个反斜杠。如果要对双引号执行相同操作,则必须加两个反斜杠(请注意,如果加三个反斜杠,则忽略第三个反斜杠)。
$pattern = '/\$(.*?)=/s';
 $pattern = '/\$(?P<variable>.*?)(?:\s|)=(?:\s|)"(?P<value>.*?)"/';