正则与UTF-8汉字:你理解[\x{4e00}-\x{9fa5}]吗?

    使用 preg_match('!^[\x{4e00}-\x{9fa5}]+$!u',$str) 可以精确地鉴定UTF-8编码的字符串是否全部是汉字。
    以前我虽然知道这么用,但是从没有理解过。UTF-8的汉字不是三字节吗?但4e00和9fa5却只有两字节啊,怎么匹配?我同样不解,模式修饰符u到底意味着什么?
    于是我开始百度,终于看到这样一句话,“从Unicode编码表(中日韩字)可以看出,汉字的编码是从4e00到9fa5”。
    Unicode编码?对啊,Unicode编码正好是两字节的。4e00是汉字“一”,而9fa5是繁体显示不出来。
    这样一来,模式修饰符u的作用就清楚了。它很可能是把UTF-8的字符串转成Unicode字符串来匹配了(匹配后输出结果时再转成UTF-8)。
回复列表(6|隐藏机器人聊天)
添加新回复
回复需要登录