Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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_替换问题,必须是琐碎的_Php_Regex - Fatal编程技术网

Php Preg_替换问题,必须是琐碎的

Php Preg_替换问题,必须是琐碎的,php,regex,Php,Regex,很明显,我在preg_替换方面做了一些完全错误的事情 假设我有一串文本 “沉默是金色的,直到你成为沉默的人。”我想用“沉默”来代替“沉默”,但不是用沉默来代替沉默 以下是我的代码: $q = "Silence is golden until you are the one silenced."; $card = "Silence"; $pattern = '/\b'.$card.'\b/i'; $q = preg_replace($pattern,'<strong>'.$card.'

很明显,我在preg_替换方面做了一些完全错误的事情

假设我有一串文本

“沉默是金色的,直到你成为沉默的人。”我想用“沉默”来代替“沉默”,但不是用沉默来代替沉默

以下是我的代码:

$q = "Silence is golden until you are the one silenced.";
$card = "Silence";
$pattern = '/\b'.$card.'\b/i';
$q = preg_replace($pattern,'<strong>'.$card.'</strong>',$q);
$q=“沉默是金色的,直到你成为沉默的人。”;
$card=“沉默”;
$pattern='/\b'.$card'.\b/i';
$q=preg_replace($pattern,“”.$card.“”,$q);
这将失败并设置$q=“”


我做错了什么?

问题解决了。在实际的代码中,我迭代了一个要preg_replace的项目数组,只应用preg_replace,而没有首先使用preg_match进行测试。

我猜,不是将\加倍,假设\表示PHP字符串中的转义字符。请尝试\\b看起来工作正常..您的代码在PHP5.2.10-2ubuntu6.5上工作正常。@Paul:在单引号字符串中,仅
\\‍
\'
是已知的转义序列;任何其他转义序列都保持不变。因此,
'\b'='\\b'
@Gumbo,谢谢。我现在对PHP有了更多的了解:)您可以使用替换的
'$0'
$0
作为整个正则表达式模式的匹配字符串的反向引用。