【问题标题】:PHP preg_split by new line with \RPHP preg_split 用 \R 换行
【发布时间】:2017-12-01 17:11:03
【问题描述】:

据我了解,以下代码行应将字符串拆分为新行(\r\n\r\n)。

preg_split("%\R%", $str);

为什么会这样

var_dump(preg_split("%\R%", "Å"));

输出

array(2) {
  [0]=>
  string(1) "▒"
  [1]=>
  string(0) ""
}

但是

var_dump(preg_split("%(\r|\n|\r\n)%", "Å"));

按预期工作并且不拆分字符?我知道我应该使用“u”修饰符(PCRE_UTF8),因为字符是 UTF-8,但为什么 preg_split 认为 Å(0xC3 0x85)可以包含一个新行?

【问题讨论】:

标签: php regex pcre


【解决方案1】:

您还提到Å0xC3 0x85

根据this PCRE documentation 不使用u 修饰符\R 等效于这个原子组:

(?>\r\n|\n|\r|\f|\x0b|\x85)

注意\x85 在两个集合中的存在。

因此,不使用u 修饰符在\R 上拆分会在输出数组中提供一个额外的元素,因为它能够在\x85 上拆分,只给您\xC3,并在结果数组中得到一个空结果。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
相关资源
最近更新 更多