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]$
并提出一点解释:
- 第一部分
搜索alpha元素,每个元素后跟一个逗号。。这些元素可以有任意数量。这些是n个元素列表中的1,2,3…n-1个元素([A-Za-z]+,)*
- 然后,最后一部分
查找最终的元素[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毫秒。我真的不认为这比使用正则表达式更好或更差,我只是为了彻底起见给出了一个替代方法。非常感谢我的朋友