正则表达式模式匹配文字重复\ n

时间:2011-07-12 22:58:26

标签: php regex preg-replace newline

给出如下字符串:

     "Hello\n\n\n\n\n\n\n\n\n\n\n\nWorld"

我想将重复的\ n减少到单个\ n

我正在使用PHP,并且正在玩一堆不同的正则表达式模式。所以这是一个简单的代码示例:

    $testRegex = '/(\\n){2,}/';
    $test = 'Hello\n\n\n\n\n\n\n\n\nWorld';
    $test2 = preg_replace($testRegex ,'\n',$test); 
    echo "<hr/>test regex<hr/>".$test2;

我是PHP的新手,而不是正则表达式的新手,但似乎'\ n'符合特殊规则。我还在试着把它们弄下来。

干杯!

编辑:我已经在我的php文件中放置了我的文字代码,如果我做了str_replace()我可以做好事情,但这显然不是一个完整的解决方案。

5 个答案:

答案 0 :(得分:3)

你很亲密 - 但请记住单引号!

     $awesome_string = preg_replace($pattern,'\n'"\n",$string);

编辑:好的,所以你想要:

$lame_string    = 'Hello\n\n\n\n\n\n\n\n\n\n\n\nWorld';
$pattern        = '/(\\\\n){2,}/';
$awesome_string = preg_replace($pattern, '\n', $lame_string);

答案 1 :(得分:0)

它确实符合特殊规则,你需要添加“multiline” - 修饰符,m。所以你的模式看起来像

$pattern = '/(\n)+/m'

应该为您提供比赛。有关所有修饰符及其详细含义,请参阅doc

由于您尝试将所有换行减少为1,因此上述模式应与其余代码一起使用。祝你好运!

答案 2 :(得分:0)

试试这个正则表达式:

/ [\ n]的* /

答案 3 :(得分:0)

也许你需要在正则表达式中加倍转义?

$pattern = "/\\n+/"

$awesome_string = preg_replace($pattern, "\n", $string);

答案 4 :(得分:0)

修改:阅读您对已接受答案的评论。不适用,但仍然有用。

如果您打算扩展此逻辑以包含其他形式的空白区域:

$output = echo preg_replace('%(\s)*%', '$1', $input);

将所有重复的空格字符缩减为匹配的空白字符的单个实例。