Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_replace变量替换用单引号显示错误_Php_Regex_Preg Replace_Double Quotes_Single Quotes - Fatal编程技术网

Php preg_replace变量替换用单引号显示错误

Php preg_replace变量替换用单引号显示错误,php,regex,preg-replace,double-quotes,single-quotes,Php,Regex,Preg Replace,Double Quotes,Single Quotes,我有这个preg\u replace语句 $s = "Foo money bar"; echo preg_replace("/(office|rank|money)/i", "<strong>$1</strong>", $s); 注意函数的第二个参数中的单引号,这将产生 syntax error, unexpected '1' (T_LNUMBER), expecting variable (T_VARIABLE) or '{' or '$' 现场示例 所以我的问

我有这个
preg\u replace
语句

$s = "Foo money bar";
echo preg_replace("/(office|rank|money)/i", "<strong>$1</strong>", $s);
注意函数的第二个参数中的单引号,这将产生

syntax error, unexpected '1' (T_LNUMBER), expecting variable (T_VARIABLE) or '{' or '$'
现场示例

所以我的问题是,为什么会出现这种情况,以及如何获得第二个示例中所示的预期输出(使用
ucfirst
)呢

更新#1 发生此问题不仅是因为函数
ucfirst
,还因为单引号,如示例所示


您不能在
preg\u replace
的第二个参数中使用函数
”。加州大学第一校区(1美元)。'
在搜索之前进行计算。要在正则表达式替换中使用函数,必须使用preg_replace_回调:

$result = preg_replace_callback($pattern, function ($m) {
    return '<strong>' . ucfirst($m[1]) . '</strong>';
}, $yourstring);
$result=preg\u replace\u回调($pattern,function($m){
返回“”.ucfirst($m[1])。”;
},$yourstring);

出现错误不是因为引号的类型,而是因为您在引号之外执行操作

echo preg_replace("/(office|rank|money)/i", "<strong>" . $1 . "</strong>", $s);


虽然没有提到这一点,但无论如何这是一本很棒的读物。

那么你能解释一下单引号的问题吗?即使我删除了该函数,它仍然无法工作。@Script47:这与单引号或双引号无关。这与在
preg\u replace
的第二个参数中使用函数有关。这肯定也与单引号有关,请检查。@Script47:我已经解释了问题所在,但很抱歉我不能为您理解。如果我的回答不清楚,请随时提问。@Script47:再一次,与引号无关:
$1
不是一个变量,它是捕获组的占位符。请注意,
ucfirst
实际上没有对该变量调用。是的,我添加了一个说明:“它的工作原理是不会出错。它仍然不会运行该函数。”你知道如何使用它使函数调用工作,或者为什么函数调用不工作吗?这是因为第二个参数不是由PHP解释的,而是由正则表达式引擎解释的。你过去可以将
e
修饰符添加到
eval()
第二个参数,但现在已弃用。您唯一的选择实际上是使用
preg\u replace\u callback()
$s = "Foo money bar";
echo preg_replace("/(office|rank|money)/i", '<strong>' . $1 . '</strong>', $s);
syntax error, unexpected '1' (T_LNUMBER), expecting variable (T_VARIABLE) or '{' or '$'
$result = preg_replace_callback($pattern, function ($m) {
    return '<strong>' . ucfirst($m[1]) . '</strong>';
}, $yourstring);
echo preg_replace("/(office|rank|money)/i", "<strong>" . $1 . "</strong>", $s);
<?php
$s = "Foo money bar";
echo preg_replace("/(office|rank|money)/i", '<strong>' . ucfirst('$1') . '</strong>', $s); // works with single and double quotes