据我了解,以下代码行应在新行处拆分字符串(\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
) 可以包含一个新线?
最佳答案
您还提到 Å
是 0xC3 0x85
根据 this PCRE documentation不使用 u
修饰符 \R
等价于这个原子组:
(?>\r\n|\n|\r|\f|\x0b|\x85)
注意 \x85
在两组中的存在。
因此在 \R
上拆分而不使用 u
修饰符会在输出数组中提供一个额外的元素,因为它能够在 \x85
上拆分给你只是 \xC3
和结果数组中的空结果。
关于PHP preg_split by new line with\R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44800756/