正则表达式由逗号分隔的三个字母,没有重复的字母

时间:2016-11-23 11:17:47

标签: java regex

我坚持使用正则表达式,我需要创建正则表达式

  1. 最多可以有三个给定的字母
  2. 三个字母应以逗号分隔
  3. 如果单个字母没有逗号
  4. 和逗号应该不计算
  5. 信不应该重复
  6. 实施例: 三个字母为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}$
    

    但我无法弄清楚如何排除重复的字母以及如何包含逗号而不计算逗号

    由于

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

^[SEC](?:,[SEC]){0,2}$

RegEx Demo

此正则表达式允许S,E,C中的一个在开始后跟逗号分隔相同的字母组0到2次。

如果您只想使用所有独特字母:

^([SEC])(?:,(?!\1|\2)([SEC])){0,2}$

答案 1 :(得分:2)

character class [SCE]将匹配SCE

然后,为了匹配逗号的零个,一个或两个序列以及3个允许的字符之一,您需要grouping construct(,[SCE]){0,2}或者使用非捕获分组构造{{1} 1}}。

为了确保没有重复的字符,请在开始时使用negative lookahead锚定,一旦找到相同的字符,匹配将失败 - (?:,[SCE]){0,2} - 其中^(?!.*([SCE]).*\1)是第1组([SEC])backreference,指的是此群组中捕获的值(\1SE

使用

C

请参阅regex demo