我需要在文本中替换以哈希标记(#)开头的单词。 我知道如何取代整个单词。
preg_replace("/\b".$variable."\b/", $value, $text);
因为\ b修饰符只接受单词字符所以包含哈希标记的单词不会被替换。
我有这个html,其中包含#companyName类型的变量,我将其替换为值。
答案 0 :(得分:5)
\b
匹配字母数字字符(简写\w
)和非字母数字字符(\W
),将下划线计为字母数字。这意味着,正如您所看到的那样,它在#
之前不会匹配(除非前面有一个alnum字符)。
我建议您只使用\b
围绕查询词,如果它以alnum字符开头和结尾。
所以,也许这样的事情(虽然我不知道任何PHP,所以这可能在语法上完全错误):
if (preg_match('/^\w/', $variable))
$variable = '\b'.$variable;
if (preg_match('/\w$/', $variable))
$variable = $variable.'\b';
preg_replace('/'.$variable.'/', $value, $text);
答案 1 :(得分:1)
所有\ b确实匹配非单词和单词字符之间的变化。既然你知道$ variable以非单词字符开头,你只需要在匹配之前加上一个非单词字符(\ W)。
但是,由于您要更换,要么需要使非单词匹配为零宽度,即后视:
preg_replace("/(?<=\\W)".$variable."\\b/", $value, $text);
或将匹配的字符合并到替换文本中:
preg_replace("/(\\W)".$variable."\\b/", $value, "$1$text");
答案 2 :(得分:1)
以下表达式也可用于标记包含非单词字符的单词的边界: -
preg_replace("/(^|\s|\W)".$variable."($|\s|\W)/", $value, $text);
答案 3 :(得分:0)
为什么不
preg_replace("/#\b".$variable."\b/", $value, $text);