java - 匹配精确字符和数字的正则表达式

标签 java regex java-8

我想匹配一个可以是 KH1KH2 或 ... 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");
    }
 }
}

它不起作用。我收到 INVALID NAME

正确的做法是什么?

最佳答案

移除外部方括号:

if(name.matches("[K][H][1-9][0-9]?")){

参见 IDEONE demo

问题是您将整个模式包含在一个具有外部 [...] 的字符类中,并且内部的所有符号(括号除外)都被视为单个文字符号,并且整个表达式只能匹配 1 个字符。

谈论优化:在这里交替并不是真正必要的,因为您可以应用 ? quantifier[0-9] 类,使其成为可选的。 ? 匹配前面子模式的 0 次或 1 次出现。

另请注意,如果您打算向字符类中添加更多选项,[K][H] 是有意义的,否则您不妨使用

if(name.matches("KH[1-9][0-9]?")){

if(name.matches("KH[1-9]\\d?")){

\d 是一个 shorthand class匹配数字。

关于java - 匹配精确字符和数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32110592/

相关文章:

在 Java 中使用 Jsoup 时出现 java.lang.IllegalArgumentException

java - System.out.print 删除 Matcher 类异常

Java 正则表达式 "double quotes and ' ' 空格

java - Spring Boot将带有时区的日期时间转换为服务器中的 '0'时区

java - Eclipse Mars 不保存首选项

java - 如何使用java将相机捕获的图像添加到Android中的imageviewer中?我尝试过以下代码

regex - 使用正则表达式替换字符串中的换行符

java - 如何在 java 8 或更高版本编译的 java 7 上运行 Jar

android - 如何在 minsdk <24 上将 Kotlin 与 Butterknife 10.1.0 一起使用?

java - 无法将 UTC 转换为本地时间