Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式只允许给定字符类中的一个字符(可能重复)_Java_Regex - Fatal编程技术网

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也希望允许使用单个字符。非常感谢。正是我需要的。谢谢你的链接。非常有用。谢谢你的链接。非常有用。