Java 正则表达式只允许给定字符类中的一个字符(可能重复)
我需要检查字符串是否只包含给定字符类中的一个不同字符。一些简单的例子:Java 正则表达式只允许给定字符类中的一个字符(可能重复),java,regex,Java,Regex,我需要检查字符串是否只包含给定字符类中的一个不同字符。一些简单的例子: “aa”、“bbbbb”、“c”匹配此正则表达式[abc]+,但正则表达式也匹配“abbb”或“abcbb”,这在我的情况下无效。所以我不能用它 示例代码: String[] input = {"a", "aaa", "ab", "b", "bbbb", "abc", "ccc"}; for(String str :input){ if(str.matches("[abc]+")){ System.o
“aa”、“bbbbb”、“c”
匹配此正则表达式[abc]+
,但正则表达式也匹配“abbb”或“abcbb”
,这在我的情况下无效。所以我不能用它
示例代码:
String[] input = {"a", "aaa", "ab", "b", "bbbb", "abc", "ccc"};
for(String str :input){
if(str.matches("[abc]+")){
System.out.println(str + ": valid");
}
else {
System.out.println(str + ": not valid");
}
}
上面的内容将对输入数组中的每个字符串都有效,这不是我想要的。有效输入仅为具有不同字符的字符串。我可以通过以下方法实现它,其中我需要在if语句中使用multiple或
for(String str :input){
if(str.matches("[a]+")||str.matches("[b]+")||str.matches("[c]+")){
System.out.println(str + ": valid");
}
else {
System.out.println(str + ": not valid");
}
}
如何实现与second aproach相同的结果,但要紧凑地编写它,因为当character类增长且character类发生更改时,这将不可读,我需要更改if条件
预期:
a: valid
aaa: valid
ab: not valid
b: valid
bbbb: valid
abc: not valid
ccc: valid
您可以使用
\1
(转义为\\1
)引用第一个子组的匹配项,例如:
^([a-z])\1+$
。。将匹配a-z,并将其自身后跟至少一次,作为字符串中的唯一字符(^和$可能是隐式的。匹配,我不太熟悉正则表达式的Java特定问题)
然后需要进行一次额外检查,以查看字符串的长度是否为1,是否包含a-z
(如果希望避免允许1、2等和其他特殊字符)。您可以使用\1
(转义为\\1
)引用第一个子组的匹配,例如:
^([a-z])\1+$
。。将匹配a-z,并将其自身后跟至少一次,作为字符串中的唯一字符(^和$可能是隐式的。匹配,我不太熟悉正则表达式的Java特定问题)
然后,您需要进行一次额外检查,以查看字符串的长度是否为1并且是否包含a-z
(如果您希望避免允许1、2等和其他特殊字符)。请参阅中的“重复字符类”
TL;博士<代码>^([a-z])\1*$
注意:可能是龙,根据引用强度,您可能需要对反斜杠进行双转义:^([a-z])\\1*$
请参阅中的“重复字符类”
TL;博士<代码>^([a-z])\1*$
注意:可能是龙,根据引用强度,您可能需要双转义反斜杠:^([a-z])\\1*$
您可能需要^([abc])\1*$
,因为OP也希望允许使用单个字符。非常感谢。正是我需要的。您可能需要^([abc])\1*$
,因为OP也希望允许使用单个字符。非常感谢。正是我需要的。谢谢你的链接。非常有用。谢谢你的链接。非常有用。