【问题标题】:Explode a string by \r\n & \n & \r at once?一次用 \r\n & \n & \r 分解一个字符串?
【发布时间】:2011-06-30 12:23:30
【问题描述】:

我想按行拆分字符串,但我希望它基于所有主要使用的换行符:

  • \n
  • \r\n
  • \r

并返回一个包含每一行的数组。

【问题讨论】:

    标签: php unicode


    【解决方案1】:

    您可以改用正则表达式和preg_split

    $lines = preg_split('/\n|\r\n?/', $str);
    

    正则表达式 \n|\r\n? 匹配 LF 或可能后跟 LF 的 CR。

    【讨论】:

    • 把 \r\n 放在第一位会更健壮吗? /\r\n?|\n/
    • @GrasDouble 是对的,这是不正确的,因为它会在字符串中留下一个 \r。
    • 这个答案很好,但我发现@jerrygarciuh 的解决方案更可取。
    • 正是我想要的!
    【解决方案2】:

    您可以用唯一的占位符替换所有出现的中断字符,然后在数组中分解字符串,执行以下操作:

    $my_string = preg_replace(array('/\n/', '/\r/'), '#PH#', $my_string);
    $my_array = explode('#PH', $my_string);
    

    【讨论】:

      【解决方案3】:

      preg_split('/\R/', $str);

      在 PHP preg_split()、preg_match 和 preg_replace 中,\R 匹配任何类型的所有换行符。

      http://www.pcre.org/pcre.txt

      默认情况下,模式中的序列\R 匹配任何Unicode 换行序列,无论选择什么作为行尾 顺序。如果你指定

      --enable-bsr-anycrlf

      默认值已更改,以便 \R 仅匹配 CRLFCRLF。 构建 PCRE 时选择的任何内容都可以在 调用库函数。

      【讨论】:

      • 在某处有这方面的文档吗?适用的版本?我在手册中没有看到它
      【解决方案4】:

      使用修剪功能等去除空格的爆炸字符串

      preg_split('/\n|\r\n?\s*/', $string)

      【讨论】:

        猜你喜欢
        • 2014-04-17
        • 2019-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        相关资源
        最近更新 更多