【问题标题】:regex to remove new line and spaces正则表达式删除新行和空格
【发布时间】:2016-06-17 17:10:22
【问题描述】:

我创建了一个正则表达式来去除空格、制表符、换行符等。

(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+

我的问题是它匹配一些空格和一些新行,而不是全部。这是为什么呢?

我试过了:

(^[\r\n]*|[\r\n]+)[\s\t+]*[\r\n]+

但似乎仍然无法匹配多个空格

Regex tester demo

【问题讨论】:

标签: php regex replace match


【解决方案1】:

我不太确定你想在这里实现什么。但是,如果您,正如您在问题中所述,只需 ** 您所要做的就是将 \s 替换为空。见regex101。 (为了清楚起见,替换为*

您的正则表达式的问题是(除了它过于复杂;)结尾 [\r\n]+ 需要 CR/LF ,如果该行前面没有空行 ( ^[\r\n] 匹配以换行符开头的行 - 即空行),第一个中的 [\r\n]+ 也需要 CR/LF。

简而言之 - 它永远不会匹配两个连续的非空行。

问候。

【讨论】:

  • 那么我需要在我的正则表达式中进行哪些更改
  • 如第一段所述,您应该使用的只是\s。检查 Tushar 对您的问题的评论。
  • 但它似乎与换行符不匹配
  • 您必须使用单行修饰符s(php 中的 PCRE_DOTALL)。
【解决方案2】:

这将消除空格:

^(?:\s*)(\w+)$  

带有多行和全局修饰符 (gm)

请,如果这解决了您的问号,请将问题标记为已解决。

【讨论】:

    【解决方案3】:

    尝试关注

    .replace(/\s+/g, "") .replace(/\n+/g, "")

    添加 global 将从任何地方替换。

    【讨论】:

      【解决方案4】:
      $input_lines = <<<EOD
      
      
      test
      
      aeee
      eeeee
      EOD;
      
      
      $output = preg_replace('/(\s)*/', '$1', $input_lines);
      var_dump($output);
      

      结果:

      string(16) "
      test
      aeee
      eeeee"
      

      如果我想删除所有换行符

      $output = preg_replace('/(\s)*/', '', $input_lines);
      var_dump($output);
      

      结果:

      string(13) "testaeeeeeeee"
      

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        • 2012-11-15
        • 1970-01-01
        • 2020-10-27
        • 1970-01-01
        相关资源
        最近更新 更多