读书人

一个正则处理汉字的有关问题请各位看

发布时间: 2013-10-18 20:53:13 作者: rapoo

一个正则处理汉字的问题,请各位看看
正则:
(?<keyword1>.*?)(飞)(?<keyword2>.*?)
用的是-lboost_regex
预期匹配到例如 “北京飞南京”这样的输入(gbk编码),并将北京和南京两个关键词找出来
大部分验证都是正确的,但是今天发现了个特列
输入“史上”,这个正则也能匹配中.....

最终找到原因是:
飞的gbk编码:B7C9
史CAB7上C9CF

我的理解是:正则表达式的处理是按字节处理的,因为是gbk编码,汉字都被拆成两个字节,
史的第二个字节和上的第一个字节
整好拼成了飞,所以就命中了该正则

求如何破,才能让“史上”不命中
ps:gbk编码方式不变 正则 regex c++
[解决办法]

引用:
Quote: 引用:

.*
换成
(..)*
试试看
不过这样就只能是中文的了。

是啊,这样只能用中文了,别的用不了
还是不行

可以把.改成中文编码规则
(?<keyword1>(([\x80-\xff].)
[解决办法]
[a-zA-Z])*?)(飞)(?<keyword2>(([\x80-\xff].)
[解决办法]
[a-zA-Z])*?)

读书人网 >C++

热点推荐