据我所知,以下代码行应在新行(\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
)可能包含一个新行?
答案 0 :(得分:4)
您还提到Å
是0xC3 0x85
根据this PCRE documentation而不使用u
修饰符\R
相当于此原子组:
(?>\r\n|\n|\r|\f|\x0b|\x85)
注意两组中都存在\x85
。
因此在\R
上拆分而不使用u
修饰符会在输出数组中添加一个额外的元素,因为它能够在\x85
上拆分,只给你\xC3
并且结果为空在结果数组中。