如何编写正则匹配首尾为相同中文(测试)中间含非中文字符的字符串
正则匹配方案
适用支持Unicode属性的正则引擎(Python3/Java/ES2018+ JS/Go等)
直接使用如下正则即可:^测试[^\p{Han}]*测试$
各部分规则说明:
^:限定匹配字符串的起始位置- 开头的
测试:固定匹配开头的指定中文字符 [^\p{Han}]*:匹配0个或任意数量的非中文字符,其中\p{Han}是Unicode属性标识符,指代所有中文字符,字符组开头的^代表取反- 结尾的
测试:固定匹配结尾的指定中文字符 $:限定匹配字符串的结束位置
适用不支持Unicode属性的旧版正则引擎(如低版本JS等)
可以用常用简体中文字符范围替代\p{Han}:^测试[^\u4e00-\u9fa5]*测试$
其中\u4e00-\u9fa5覆盖了绝大多数常用简体、繁体中文字符,可满足大部分场景需求。
验证效果
- 匹配通过示例:
测试1003##$%#测试完全符合规则可匹配 - 匹配不通过示例:
测试123中文测试中间存在中文字符,无法匹配
你之前提到的负向预查写法
^((?!(\p{Han}).)*$是用来匹配全字符串无中文字符的场景,本需求无需使用复杂度更高的负向预查,直接用反向字符组即可实现,性能更优。
内容的提问来源于stack exchange,提问作者Rocket
相关产品推荐
相关产品推荐

