我有:
$ap=0;
$matches=array();
d($ap, $vv[$value],$matches);
$ap = preg_match("/\$[({].+[)}]/", $vv[$value], $matches);
d($ap, $vv[$value],$matches);
d()
是一个自定义函数,例如 var_dump()
。
当$vv[$value]
为“exec_prefix = ${prefix}”时,为什么$ap
为0
,并且没有匹配项($matches 仍然是一个空数组)?
我希望匹配“${prefix}”。
我尝试了 regexpal.com 中的正则表达式,它也匹配。
最佳答案
在您的正则表达式中,您尝试使用 $
作为字段标记的开头。由于 PHP 需要对 $
进行转义,否则它会认为它引入了变量替换(在双引号中),它将使用您为此目的而包含的 \
。但这然后将正则表达式保留为
/$[({].+[)}]/
这意味着它将使用 $
作为字符串标记的结尾 - 因此找不到您之后的内容。
因此,您需要在美元之前进行第二次逃逸,以确保它被正确拾取......
$ap = preg_match("/\\$[({].+[)}]/", $vv[$value], $matches);
关于php - PHP 中的正则表达式期望匹配像 "${string}"这样的字符串,但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56389426/