PHP preg_split by new line with\R

标签 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) 可以包含一个新线?

最佳答案

您还提到 Å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/

相关文章:

php - Mysql根据一张表的ID从2张表中选择数据

MySQL去除非数字字符进行比较

php - 在带有转义的 php 中用逗号和等号分隔字符串

c++ - 使用正则表达式解析零宽度正则表达式

regex - 如何在正则表达式中匹配特定于语言的字符?

php - Laravel auth 中间件使用了错误的数据库

php - Q : Edit New Password PHP Mysql

Javascript token 转换

javascript - 正则表达式只工作一次

php - 在 css 中不正确显示具有 float 属性的 block