How can I match letters a,b,c once in any combination and varying length like this:
The expression should match these cases:
abc
bc
a
b
bca
but should not match these ones:
abz
aab
cc
x
How can I match letters a,b,c once in any combination and varying length like this:
The expression should match these cases:
abc
bc
a
b
bca
but should not match these ones:
abz
aab
cc
x
使用正则表达式模式
\b(?!\w*(\w)\w*\1)[abc]+\b
您可以将此模式与任何集合和大小一起使用,只需替换[abc]
为所需的集合...
示例:
(以上输出来自myregextester)
只是为了完善该系列:
^(?:([abc])(?!.*\1))+$
想要处理更大的字符集?没问题:
^(?:([abcdefgh])(?!.*\1))+$
编辑:显然我误读了这个问题;您不是在验证单个字符串,例如"abc"
and "ba"
,而是在尝试在更大的字符串中查找全字匹配。我会这样做:
\b(?:([abc])(?![abc]*\1))+\b
棘手的部分是确保前瞻不会超出当前匹配的单词的末尾。例如,如果我将前瞻保留为(?!.*\1)
,它将无法匹配abc
in ,因为前瞻会错误地将inabc za
标记为a
inza
的副本。允许先行只查看有效字符 ( ) 使其保持足够短的约束。而且,如果当前单词中有无效字符,无论如何都不是先行的工作来发现它们。a
abc
[abc]*
(感谢Honest Abe让我重新注意到这一点。)
^(?=(.*a.*)?$)(?=(.*b.*)?$)(?=(.*c.*)?$)[abc]{,3}$
锚定前瞻将每个字母的出现次数限制为一个。
我在评论中链接了它(这有点像How can I find repeat characters with a regex in Java?)..但更具体地说..正则表达式:
(\w)\1+
将匹配任何两个或多个相同的字符。否定它,你就有了你的正则表达式。