Java 匹配精确字符和数字的正则表达式
我想匹配一个字符串,它可以是Java 匹配精确字符和数字的正则表达式,java,regex,java-8,Java,Regex,Java 8,我想匹配一个字符串,它可以是KH1或KH2或KH99 是的 public class Test1 { public static void main(String[] args) { String name = "KH1"; if(name.matches("[[K][H][1-9][0-9]]") || name.matches("[[K][H][1-9]]")){ System.out.println("VALID NAME"); }else{
KH1
或KH2
或<代码>KH99
是的
public class Test1 {
public static void main(String[] args) {
String name = "KH1";
if(name.matches("[[K][H][1-9][0-9]]") || name.matches("[[K][H][1-9]]")){
System.out.println("VALID NAME");
}else{
System.out.println("INVALID NAME");
}
}
}
它不起作用。我得到的名称无效
正确的方法是什么?拆下外部方括号:
if(name.matches("[K][H][1-9][0-9]?")){
看
问题是,您将整个模式包含在一个字符类中,该字符类的外部为[…]
,内部的所有符号(括号除外)都被视为单个文字符号,整个表达式只能匹配一个字符
谈到优化:这里并不需要进行替换,因为您可以将其应用于[0-9]
类,使其成为可选的<代码>?与前面子模式的0或1次匹配
另外请注意,如果您计划在字符类中添加更多选项,则[K][H]
是有意义的,否则您最好使用
if(name.matches("KH[1-9][0-9]?")){
或
\d
是一个匹配数字的正则表达式。您可以使用单个正则表达式
if(name.matches("KH(?:[1-9]\\d|[1-9])")) {
首先,这些外部方括号是不正确的。移除它们。其次,正则表达式可以简化很多。您不需要两个单独的表达式,也不需要在字符类中包含单个字符
K
和H
。尝试:
KH[1-9][0-9]?
这将匹配文字字符KH
,后面是数字1到9,以及可选的另一个数字0到9-由以下合法字符串说明:
KH1
KH2
...
KH8
KH9
KH10
KH11
...
KH18
KH19
KH20
KH21
...
KH98
KH99
请出示您的输入。请检查问题。我对这个问题有些困惑。我们可以这样尝试吗?KH\d+@raghavendra我想不行。我们不能,因为OP已经定义他想要从1到99的整数值only@NarendraSisodia好的,明白了,谢谢,我想这些只是输入,你不能检查
KH1或KH2或。。。KH99
是的,因为他们只为1
到99
构建了它,而不是为100
构建了它,我希望现在已经很清楚了。如果您仍有疑问,请随时发表评论。请注意(括号除外),我的意思是外部[…]
中的[
和]
被Java正则表达式引擎忽略。现在非常清楚了。非常感谢。但我只能在5分钟后接受答案。@Rajkishan您的输出可以有这个KH100吗?@AvinashRaj:自从我打字以来,我甚至没有看其他答案。@FooF:如果您计划将正则表达式与Matcher.find()
,或replaceAll()
,或split()
,您需要它们。。。。
KH1
KH2
...
KH8
KH9
KH10
KH11
...
KH18
KH19
KH20
KH21
...
KH98
KH99