PHP preg_split由\ R的新行

时间:2017-06-28 11:08:08

标签: php regex pcre

据我所知,以下代码行应在新行(\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)可能包含一个新行?

1 个答案:

答案 0 :(得分:4)

您还提到Å0xC3 0x85

根据this PCRE documentation而不使用u修饰符\R相当于此原子组:

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

注意两组中都存在\x85

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