PHP中的正则表达式希望匹配字符串,如${string}";不起作用

PHP中的正则表达式希望匹配字符串,如${string}";不起作用,php,regex,Php,Regex,我有: $ap=0; $matches=array(); d($ap, $vv[$value],$matches); $ap = preg_match("/\$[({].+[)}]/", $vv[$value], $matches); d($ap, $vv[$value],$matches); d()是一个自定义函数,类似于var\u dump() 当$vv[$value]是“exec_prefix=${prefix}”时,为什么$ap是0,并且没有匹配项($matches仍然是空数组) 我希

我有:

$ap=0;
$matches=array();
d($ap, $vv[$value],$matches);
$ap = preg_match("/\$[({].+[)}]/", $vv[$value], $matches);
d($ap, $vv[$value],$matches);
d()
是一个自定义函数,类似于
var\u dump()

$vv[$value]
是“exec_prefix=${prefix}”时,为什么
$ap
0
,并且没有匹配项($matches仍然是空数组)

我希望“${prefix}”匹配


我在regexpal.com中尝试了正则表达式,它也匹配。

在您的正则表达式中,您试图使用
$
作为字段的开始标记。由于PHP需要对
$
进行转义,否则它会认为它引入了变量替换(双引号),因此它将使用您为此目的包含的
\
。但这样一来,正则表达式就成了

/$[({].+[)}]/
这意味着它将使用
$
作为字符串的结尾标记,因此无法找到后面的内容

所以,你需要第二次逃走,才能确保美元被正确地拾起

$ap = preg_match("/\\$[({].+[)}]/", $vv[$value], $matches);
“$”之前的“\”在进入preg_match()之前被删除,因为PHP将其视为“$”的转义字符

要解决此问题,只需使用单引号而不是双引号:

$ap = preg_match('/\$[({].+[)}]/', $vv[$value], $matches);