如何编写正则匹配符合特定括号对模式、长度任意的字符串?
正则匹配问题解答
原正则错误分析
- 规则要求单元内必须存在两个A-Z大写字母,原正则中的
[A-Z]?带?量词允许字母为空,不符合规则 - 原正则中出现的
.和.*会匹配任意字符,导致字符串中出现单元、分隔空格以外的内容也会被判定为合法,不符合要求 - 没有处理多个单元之间的空格分隔逻辑,也没有限制字符串末尾不能存在多余空格
符合要求的正则表达式
如果要求至少存在1个单元,正则本身写法如下:^\([A-Z],[A-Z]\)( \([A-Z],[A-Z]\))*$
如果允许空字符串(0个单元),修改为:^(?:\([A-Z],[A-Z]\)( \([A-Z],[A-Z]\))*)?$
如果是在编程语言的字符串字面量中使用,需要对反斜杠转义,以至少1个单元的版本为例,转义后写法为:^\\([A-Z],[A-Z]\\)( \\([A-Z],[A-Z]\\))*$
正则逻辑解释
^匹配字符串开头,$匹配字符串结尾,确保整个字符串都符合规则\([A-Z],[A-Z]\)匹配单个符合要求的单元:左括号+大写字母+逗号+大写字母+右括号( \([A-Z],[A-Z]\))*匹配0个或多个「空格+单元」的组合,只有后续有单元的时候才需要前面加空格,自然保证了末尾不会有多余空格- 可选的非捕获组
(?:...)?是为了兼容空字符串的场景,不需要可以去掉
验证示例
合法匹配示例:
(A,B):匹配成功(A,B) (B,C):匹配成功
非法匹配示例:(A,b):小写字母,匹配失败(A,B):末尾带空格,匹配失败(A,C)(B,D):单元之间无空格,匹配失败(A,):缺少第二个字母,匹配失败
内容的提问来源于stack exchange,提问作者SkepticalTiger
相关产品推荐
相关产品推荐

