reg表达式 - 用所有出现的新行替换文本 - php

时间:2015-09-30 07:06:24

标签: php regex str-replace

我正在尝试使用正则表达式将“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;

但它是显示原始文本。没有执行任何操作。请帮忙。

4 个答案:

答案 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);

注意:请注意在这里使用引号。

Demo

答案 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);