给出如下字符串:
"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()我可以做好事情,但这显然不是一个完整的解决方案。
答案 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);
将所有重复的空格字符缩减为匹配的空白字符的单个实例。