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

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

最终找到原因是:
的gbk编码:B7C9
史CAB7C9CF

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

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

------解决方案--------------------
引用:
Quote: 引用:

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

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

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