字符串匹配的Java正则表达式,应仅包含字母数字和“-”

字符串匹配的Java正则表达式,应仅包含字母数字和“-”,java,regex,Java,Regex,我需要在java中添加正则表达式来测试字符串是否只包含字母数字加或不加-。 例: 等等。尝试使用以下正则表达式: /^[A-Z0-9-]*$/ 您可以这样运行它: str.matches("[A-Z0-9-]*"); // Returns a Boolean 您要查找的正则表达式是: "^[A-Z0-9-]+$" 你应该试试这个 "^[0-9a-zA-Z-]+$" 你可以试试 for (String s : "ADB123,ABC-D1,12ABCD,A-BCD1,abcd12,a.b.

我需要在java中添加正则表达式来测试字符串是否只包含字母数字加或不加-。 例:


等等。

尝试使用以下正则表达式:

/^[A-Z0-9-]*$/
您可以这样运行它:

str.matches("[A-Z0-9-]*"); // Returns a Boolean

您要查找的正则表达式是:

"^[A-Z0-9-]+$"
你应该试试这个

"^[0-9a-zA-Z-]+$"
你可以试试

for (String s : "ADB123,ABC-D1,12ABCD,A-BCD1,abcd12,a.b.c,12£".split(",")) {
    boolean ok = s.matches("[-\\p{Alnum}]+");
    System.out.println(s + " is ok: " + ok);
}
印刷品

ADB123 is ok: true
ABC-D1 is ok: true
12ABCD is ok: true
A-BCD1 is ok: true
abcd12 is ok: true
a.b.c is ok: false
12£ is ok: false
正则表达式[-\\p{Alnum}]+表示

[]表示一个或多个字符。 -一开始的意思是——不是,也不是别的。 \\在字符串中,文字将变为“\”,就像它是转义字符一样。 \p{Alnum}是字母和数字字符的预定义列表。
有关更多详细信息,请参阅文档。

好的,您尝试了什么?为什么会出现大量的反对票和接近票?在这个问题上,什么是模糊的、模棱两可的、不完整的或过于宽泛的?对我来说,它非常清晰、明确且范围明确。你不需要转义-。你是对的:负号表示字符类中的一个范围,当它不在[开始括号后的第一个位置或]结束括号前的最后一个位置时。示例:[A-Z]匹配任何大写字符。示例:[A-Z-]或[-A-Z]匹配任何大写字符或-。如果您试图转义-使用/which-should\则不需要。为什么两者都有:-*{0,}。使用*本身意味着0个或更多/范围是有风险的-您不能100%确定要包含或遗漏什么,因为您不知道当前字符集在第一个字符和最后一个字符之间包含什么。在大多数字符集中,您的范围不包括重音字母;你是有意的吗?你考虑过吗?^ [[:AlnN::] -+$比一个范围更安全。但这也可以看作是一个解决方案吗?上面的正则表达式满足小写字母?^和$是多余的。matches@Peter劳瑞,谢谢,它工作得很好。你能解释一下它是如何工作的吗?我在正则表达式方面很差。这是最好的答案,因为它使用的是alnum类而不是range。@RamCh给出了正则表达式的详细说明。@Peter Lawrey,谢谢,现在我知道了。
ADB123 is ok: true
ABC-D1 is ok: true
12ABCD is ok: true
A-BCD1 is ok: true
abcd12 is ok: true
a.b.c is ok: false
12£ is ok: false