我正在尝试使用正则表达式将“XYZ”替换为“\ n”换行符。但我没有成功。请检查以下代码并帮助我。
$epText = "this is for text |XYZ and |XYZ and XYZ";
$find = '|XYZ';
$replace = '\n';
$epFormatedText = preg_replace_callback(
'/{{.+?}}/',
function($match) use ($find, $replace) {
return str_replace($find, $replace, $match[0]);
},
$epText
);
echo $epFormatedText;
但它是显示原始文本。没有执行任何操作。请帮忙。
答案 0 :(得分:1)
原因是您在\n
$replace
周围使用单引号。这样,\n
被视为文字\
+ n
字符。
至于正则表达式,我建议使用(?<!\w)
和(?!\w)
环顾四周,因为您希望匹配整个单词,而不是其他较长单词的部分(根据您的示例判断)。
由于输入($find
)可以包含特殊的正则表达式元字符,因此您需要使用preg_quote
来转义这些符号。
这是您的固定代码:
$epText = "this is for text |XYZ and |XYZ and XYZ";
$find = '|XYZ';
$replace = "\n";
$epFormatedText = preg_replace(
"/(?<!\\w)" . preg_quote($find) . "(?!\\w)/",
$replace,
$epText
);
echo $epFormatedText;
请参阅IDEONE demo
答案 1 :(得分:1)
你以错误的方式做到这一点你只需要preg_replace
就像
$epText = "this is for text |XYZ and |XYZ and XYZ";
$find = '|XYZ';
$replace = '\n';
echo preg_replace("/\B" . preg_quote($find) . "\b/","\n",$epText);
注意:请注意在这里使用引号。
答案 2 :(得分:0)
当preg_replace
应该做你需要的时候,不需要这么复杂的功能。
$epText = "this is for text XYZ and XYZ and XYZ";
$replaced = preg_replace('@XYZ@',"\n",$epText);
echo '<textarea>', $replaced ,'</textarea>';
答案 3 :(得分:0)
试试这个
echo preg_replace('/XYZ/', '<br>', $epText);