我坚持使用正则表达式,我需要创建正则表达式
实施例:
三个字母为S,E,C
正则表达式应匹配:
S
S,E
S,C
S,E,C
E,C
C
不匹配:
S,S
S,E,E,C
S,E,C,C
S,E,C,S
S,E,C,E,S
我试过这个正则表达式:
^[SEC]{1,3}$
但我无法弄清楚如何排除重复的字母以及如何包含逗号而不计算逗号
由于
答案 0 :(得分:2)
您可以使用此正则表达式:
^[SEC](?:,[SEC]){0,2}$
此正则表达式允许S,E,C
中的一个在开始后跟逗号分隔相同的字母组0到2次。
如果您只想使用所有独特字母:
^([SEC])(?:,(?!\1|\2)([SEC])){0,2}$
答案 1 :(得分:2)
character class [SCE]
将匹配S
,C
或E
。
然后,为了匹配逗号的零个,一个或两个序列以及3个允许的字符之一,您需要grouping construct:(,[SCE]){0,2}
或者使用非捕获分组构造{{1} 1}}。
为了确保没有重复的字符,请在开始时使用negative lookahead锚定,一旦找到相同的字符,匹配将失败 - (?:,[SCE]){0,2}
- 其中^(?!.*([SCE]).*\1)
是第1组([SEC])
是backreference,指的是此群组中捕获的值(\1
,S
,E
)
使用
C
请参阅regex demo