Regex 如何检查组中具有不同值的语句?

Regex 如何检查组中具有不同值的语句?,regex,Regex,组值为(a | b | c)正则表达式将为这些语句提供以下输出: a (True) a,b (True) b,c (True) b,c,a (True) a, (false) -no value after ',' a,a (false) -Repeated values b,b (false) -Repeated values 您希望在集合{a,b,c}中找到一个组的列表,但不希望有任何附加的尾部coma。我想您也不希望缺少元素(连续COMA) 我提议: ^([a|b|c],)*[

组值为
(a | b | c)
正则表达式将为这些语句提供以下输出:

a   (True)
a,b (True)
b,c (True)
b,c,a (True)

a,   (false) -no value after ','
a,a (false) -Repeated values
b,b (false) -Repeated values

您希望在集合{a,b,c}中找到一个组的列表,但不希望有任何附加的尾部coma。我想您也不希望缺少元素(连续COMA)

我提议:

^([a|b|c],)*[a|b|b]$
并提出一点解释:

  • 第一部分
    ([A-Za-z]+,)*
    搜索alpha元素,每个元素后跟一个逗号。。这些元素可以有任意数量。这些是n个元素列表中的1,2,3…n-1个元素

  • 然后,最后一部分
    [a | b | c]
    查找最终的元素

  • 整个字符串由
    ^[stuff]$
    包围,以从头到尾强制使用正则表达式来匹配整个输入字符串

试试看。(我不属于这个网站)


希望这能有所帮助。

这里有一个防止重复和尾随逗号的正则表达式

/^(?:([abc]),(?!.*\1))*([abc])$/gm
它测试包含后跟逗号的字符的可选组。在小组内-使用消极前瞻,以确保同一角色不会在线上重复。该组可以重复任意次数。最后测试最终字符(非可选)

问候

编辑:

在回答评论中的一个问题时-以下是您如何使用标记/单词进行同样的操作:

^(?:(cat|dog|rat),(?!.*\1))*(cat|dog|rat)$


它基本上是相同的正则表达式,但使用交替的单词而不是字符类。

正则表达式不是解决这个问题的唯一方法

如果您想了解如何在没有正则表达式的情况下实现这一点,下面是一些JavaScript代码,演示如何实现这一点。如果您想看到ClasG与regex的正面演示,

var regexReplacement = function(input) {
  var acceptableStrings = ["a", "b", "c"];
  var arr = input.split(",");
  if (arr.indexOf("") == -1 && (new Set(arr)).size == arr.length) {
    return arr.every(function(val) {
      return acceptableStrings.some(function(acceptable) {
        return val === acceptable;
      });
    });
  } else {
    return false;
  }
}


您的问题不清楚,请澄清。@WiktorStribiżew这将匹配a、a和b.b,不是吗?@ChrisLear:当然,前瞻是必要的。您使用的是什么风格的正则表达式?如中所示,正则表达式使用的是哪种编程语言?是
a
b
c
只是字母或多字符字符串?请确保不需要重复。真倒霉,我不认为这是可能的。我建议使用上面的方法,然后扫描一次
*a.*
,然后扫描
*b.*
,最后扫描
*c.*
,并请求最后3次扫描的匹配数,如果该匹配重复。不正确,但这会给我一个重复的alpha,例如a,a或b,b:(我想所有的投票都是因为有很多单词,而不是因为它工作非常感谢Sylvain Boisse
/^(?(:?,([abc])(?!.\1))*$/gm
稍微短了一点,我认为在其他方面类似。@ChrisLear可能以逗号开头,但我想这不太好。我真的很喜欢更改它搜索的字母是多么容易。我使用这个正则表达式创建了一个很酷的小提琴!也请参见我的答案。您如何调整这个正则表达式以搜索多字符标记相反?如果你好奇的话,我发现我的函数平均值约为0.2141毫秒,正则表达式平均值约为0.2134毫秒。我真的不认为这比使用正则表达式更好或更差,我只是为了彻底起见给出了一个替代方法。非常感谢我的朋友