PHP preg_replace单行,忽略多行可能吗?

时间:2011-10-04 05:53:25

标签: php preg-replace

我已经花了几个小时来解决这个问题,但由于我缺乏preg_match知识,即使在研究之后也可能很容易。这可以将多行删除为一行:

$string = preg_replace('/^\n|^[\t\s]\n/m', "", $string); 

如何反转其功能以便忽略多行并删除单行空格?所以如果输入是:

one

two



three

它会删除1到2之间的空格,但在三个之前忽略多个空格,结果如下:

one
two



three

感谢。

编辑帖子

谢谢你们。 3emad,你的代码适用于我的例子。我错了,我希望这可以使用代码而不仅仅是我的文本,当我尝试使用

// ----- limits -----



$new_limit = 7;       // maximum days in What's New section

$hot_limit = 20;      // top 20 most accessed links

$toprated_limit = 20; // top 20 most rated links 



// ----- bold the keyword in search result -----



$bold_keyword = 1;

它没有删除变量之间的单行,而忽略了导致注释的双重空格。

2 个答案:

答案 0 :(得分:1)

这是正则表达式:

[\r|\r\n](?=\w)

这适用于您的示例,您可以在RegExr

进行测试

秘诀是使用积极的前瞻匹配,你可以了解更多关于“向前看”here

$str = '// ----- limits -----



$new_limit = 7;       // maximum days in What\'s New section

$hot_limit = 20;      // top 20 most accessed links

$toprated_limit = 20; // top 20 most rated links 



// ----- bold the keyword in search result -----



$bold_keyword = 1;';

echo '<pre>';
echo preg_replace('/\r?\n(?=[\w|\$])/m','',$str);
echo '</pre>';

对正则表达式有用PHP reference

答案 1 :(得分:1)

不确定这是否是完美的解决方案,这将删除额外的行+额外空格+标签

<?php
$input="this is  nimit

and friends
    this must be in single line.

@234 234234
                I have test this.
";
$input = str_replace(' ','_',$input);
$result = preg_replace('/\s+/','<br>',$input);
$result = str_replace('_',' ',$result);
echo $result;
?>