我有一个名单列表,我使用preg_replace使这些名称的某些部分变为粗体。我正在使用str_replace但我需要限制它。
但是我收到错误"分隔符不能是字母数字或反斜杠"。经过一些研究后我发现它正在发生,因为我的模式变量上缺少斜杠。
然而,我一直在努力,我无法做到正确,而且我找不到像我这样的例子。谢谢您的帮助。
while($row = $result->fetch_array()) {
$name = $row['name'];
$array = explode(' ',trim($name));
$array_length = count($array);
for ($i=0; $i<$array_length; $i++ ) {
$letters = substr($array[$i], 0, $q_length);
if ($letters = $q) {
$bold_name = '<strong>'.$letters.'</strong>';
$final_name = preg_replace($letters, $bold_name, $array[$i], 1);
$array[$i] = $final_name; }
}
答案 0 :(得分:2)
你的正则表达式需要一个分隔符。例如,使用~
:
$final_name = preg_replace('~'.$letters.'~', $bold_name, $array[$i], 1);
您可以在the documentation for PCRE delimiters和the documentation for preg_replace
了解更多信息。
来自文档:
使用PCRE功能时,需要将模式包含在分隔符中。分隔符可以是任何非字母数字,非反斜杠,非空白字符。
经常使用的分隔符是正斜杠(
/
),哈希符号(#
)和波浪号(~
)。以下是有效分隔模式的所有示例。
/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%
答案 1 :(得分:0)
您只需要将简单分隔符添加到preg_replace
的第一个参数。
向$letters
添加正斜杠(但也可以使用其他分隔符。)
$final_name = preg_replace('/'.$letters.'/', $bold_name, $array[$i], 1);
如您所述,答案本身就是Delimiter must not be alphanumeric or backslash
。