一个正则处理汉字的问题,请各位看看
正则:
(?<keyword1>.*?)(飞)(?<keyword2>.*?)
用的是-lboost_regex
预期匹配到例如 “北京飞南京”这样的输入(gbk编码),并将北京和南京两个关键词找出来
大部分验证都是正确的,但是今天发现了个特列
输入“史上”,这个正则也能匹配中.....
最终找到原因是:
飞的gbk编码:B7C9
史CAB7上C9CF
我的理解是:正则表达式的处理是按字节处理的,因为是gbk编码,汉字都被拆成两个字节,
史的第二个字节和上的第一个字节
整好拼成了飞,所以就命中了该正则
求如何破,才能让“史上”不命中
ps:gbk编码方式不变 正则 regex c++
[解决办法]
可以把.改成中文编码规则
(?<keyword1>(([\x80-\xff].)
[解决办法]
[a-zA-Z])*?)(飞)(?<keyword2>(([\x80-\xff].)
[解决办法]
[a-zA-Z])*?)