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

为何PHP正则表达式会匹配包含°的字符串‘station n°12015’?

问题原因及解决方案

你的正则之所以匹配了带°的字符串,核心原因是没启用UTF-8模式:

PHP的PCRE正则引擎默认按字节处理字符,而°和¬都是UTF-8编码的双字节字符(°对应0xC2 0xB0,¬对应0xC2 0xAC)。当正则不带u修饰符时,引擎会把¬拆成两个独立字节放进字符类,其中的0xC2字节刚好和°的第一个字节重合,所以被误判为匹配。

解决办法

给正则表达式加上u修饰符,强制引擎按完整Unicode字符处理,这样字符类里的每个符号都会被当作整体识别:

$special_characters_pattern = '/[£$%*}{~<>|=¬!?]/u';

另外可以简化正则里重复的>(原代码里的&gt;&lt;&gt;实际对应><>),改成<>不影响功能,更简洁。

修改后再测试station n°12015,就会输出OK,不会误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.06 13:12:31