PCRE正则中\p{N}的数字字符定义及中日数字不匹配问题
为什么PCRE中\p{N}匹配不到中文、日文数字?
首先得明确Unicode字符分类和\p{N}的匹配范围:
\p{N}对应的是Unicode通用类别里的Number(数字)类字符,这个类下面又分三个子类:Nd:十进制数字,比如阿拉伯数字1、梵文数字६、卡纳达数字೬这类有明确十进制数值的字符Nl:类字母数字,比如罗马数字ⅨNo:其他数字符号,比如分数¾、上标数字¹这类特殊数字标记
- 而中文的「一、六」,日文的「一、六」这类字符,在Unicode里被归类为
Lo(Other Letters,其他字母),属于表意文字的字母范畴,根本不在Number类里,自然不会被\p{N}匹配。
如果要匹配这类中文/日文数字,得单独处理:要么直接写出目标字符范围,比如[一二三四五六七八九十零〇壹贰叁肆伍陆柒捌玖拾佰仟万亿];要么先筛选CJK字符区块再匹配数字表意字。
内容的提问来源于stack exchange,提问作者julaine
相关产品推荐
相关产品推荐

