You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则匹配阿拉伯字符串时\R误判换行符,str_contains未检测到\r

问题分析与解答

这和非ASCII字符串本身无关,问题出在正则表达式中\R的匹配规则上:

  • PHP的PCRE正则引擎里,\R是一个特殊转义序列,它匹配的是所有Unicode标准定义的换行类字符/序列,包括:
    • 普通的\r(U+000D)、\n(U+000A)、\r\n组合
    • 非ASCII的换行相关字符:U+0085(下一行)、U+2028(行分隔符)、U+2029(段落分隔符)等
  • 而str_contains($foo, "\r")只会精确匹配ASCII的回车符(U+000D),不会识别其他Unicode换行类字符。

你的测试字符串中,肉眼看不到的换行符大概率是某个非ASCII的Unicode换行类字符(比如U+2028或U+2029),所以会被\R匹配到,但不会被str_contains的精确匹配命中。

如果要验证,可以用bin2hex($foo)查看字符串的十六进制编码,就能找到那个隐藏的换行类字符;或者把正则改成只匹配ASCII回车符/\r/,此时preg_match会和str_contains返回一致的结果。

内容的提问来源于stack exchange,提问作者callum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:22:35