如何使用单个正则表达式匹配四种指定的字符串变体?
正则表达式匹配方案
可行正则表达式
^[A-Z]+(?:_[A-Z]+)*$
匹配逻辑拆解
^与$锚定字符串的首尾,确保整个字符串完全匹配规则,不会出现部分匹配的情况[A-Z]+匹配一段由一个或多个大写字母组成的序列(对应ABC、DEF这类独立段)(?:_[A-Z]+)*是一个非捕获分组,*表示该分组可出现0次或多次:- 分组出现0次时,匹配第一种变体
ABC - 出现1次时,匹配
ABC_DEF - 出现2次时,匹配
ABC_DEF_GHI - 出现3次时,匹配
ABC_DEF_GHI_JKL
- 分组出现0次时,匹配第一种变体
原表达式问题说明
你之前尝试的[A-Z]+(_[A-Z]?+)存在两处问题:
- 缺少首尾锚定,可能匹配到更长字符串的片段
_[A-Z]?+中的?表示仅匹配0或1个大写字母,无法满足DEF、GHI这类多字母片段的需求,同时也没有允许该组合重复多次的逻辑
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

