【问题标题】:Removing various sorts of whitespace in PHP删除 PHP 中的各种空格
【发布时间】:2012-09-07 10:04:47
【问题描述】:

我希望使用正则表达式删除多个换行符。假设我有这个文本:

"On the Insert tab\n \n\nthe galleries include \n\n items that are designed"

那我想换成

"On the Insert tab\nthe galleries include\nitems that are designed"

所以我的要求是:

  1. 它将删除所有多个换行符并替换为一个换行符
  2. 它将删除所有多个空格并替换为一个空格
  3. 空格也会被修剪

我确实搜索了很多,但找不到解决方案 - 我得到的最接近的是Removing redundant line breaks with regular expressions

【问题讨论】:

  • 这是你的空间部分:: stackoverflow.com/questions/2368539/…
  • @Sudhir 我可以删除多个空格,但我也需要删除多个换行符。
  • @ARIFMAHMUDRANA 以下是该技术的概要: 1) 修剪字符串。 2) 找出所有多于一个空白字符的块。 3) 对它们进行迭代,如果块包含 \n 字符,则将其替换为单个 \n,否则将其替换为单个空格。最简单的方法是使用preg_replace_callback()。我什至会免费为您提供所需的正则表达式:/\s+/。尝试自己实现它,如果你不能正确地展示你的想法,那么我们可以帮助你看看哪里出了问题。
  • @Sudhir 是否适用于换行符之间的空格?

标签: php regex whitespace removing-whitespace


【解决方案1】:

使用这个:

echo trim(preg_replace('#(\s)+#',"$1",$string));

【讨论】:

  • 这会将<space>\n\n<space> 替换为<space>,而它应该替换为\n
  • @Yazmat 关键是检查您在字符串中检测到的每个标记,看看它是否包含新行,如果包含则返回一个新行,如果不包含则返回一个空格.我还会给你一个提示,告诉你如何在飞行中轻松地做到这一点:preg_replace_callback()。另请注意,虽然您的表达式是正确的并且可以工作,但它会非常低效,因为您将检查每个空白块(包括单个字符),而您只需要检查两个或多个空白字符块。
【解决方案2】:
$text = str_replace("\r\n", "\n", $text); // converts Windows new lines to Linux ones
while (strpos($text, "\n\n") != false)
    {
        $text = str_replace("\n\n", "\n", $text);
    }

这将整理换行符。

【讨论】:

    【解决方案3】:
    $text = trim($text);
    preg_replace('/\s+/', ' ', $text);
    preg_replace('/(?:\s*(?:\r\n|\r|\n)\s*){2}/s', "\n", $text);
    

    感谢Removing redundant line breaks with regular expressions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多