如何在java中检查匹配模式

时间:2015-10-27 10:02:50

标签: java regex pattern-matching

我想匹配像"sec 30-31"这样的模式。但它不适合我。

我正在使用如下的匹配模式。

private boolean checkConstraint(String inputValue) {
    inputValue = inputValue.trim();
    if (inputValue.matches("[\\>][\\s]*[\\d]*") || inputValue.matches("[\\<][\\s]*[\\d]*") || inputValue.matches("[\\d]*[\\s]*[-][\\s]*[\\d]*")
            || inputValue.matches("[\\=][\\s]*[\\d]*") || inputValue.matches("[\\=][\\s]*[\\w]*") || inputValue.matches("[\\d]*")
            || inputValue.matches("[\\w]*") || inputValue.matches("[\\d]*[\\s]*[|][\\s]*[\\d]*")
            || inputValue.matches("[\\w]*[\\s]*[|][\\s]*[\\w]*") || inputValue.matches("[\\d]*[\\,][[\\s]*\\d\\,]*")
            || inputValue.matches("[\\w]*[\\,][[\\s]*\\w\\,]*") || inputValue.matches("[\\d]*[\\s]*[\\?]")
            || inputValue.matches("[\\w]*[\\s]*[\\?]") || inputValue.matches("[\\d]*[\\s]*[\\*]") || inputValue.matches("[\\w]*[\\s]*[\\*]")
            || inputValue.matches("[\\w]*[\\s]*[\\w\\,]*") || inputValue.matches("[\\s]*[\\%]*[\\s]*[\\w]*[\\s]*")
            || inputValue.matches("[\\s]*[\\w]*[\\s]*[\\%][\\s]*") || inputValue.matches("[\\s]*[\\%]*[\\s]*[\\w]*[\\s]*[\\%][\\s]*")
            || inputValue.matches("[\\w]*[\\s]*[-][\\s]*[\\w]*") || inputValue.matches("[\\w]*[\\s]*[.][\\s]*[\\w]*")
            || inputValue.matches("[\\w]*[\\s]*['][\\s]*[\\w]*") || inputValue.matches("[[\\w]*[\\s]*[\\w]*[\\s]*]*")) {
        return true;
    }
    return false;
}

我想匹配字符串&#34; sec 30-31&#34;当我匹配其返回false inputValue.matches("[\\w]*[\\s]*[-][\\s]*[\\w]*")时,它将返回true。

任何人都可以帮助我。

由于

Sitansu

1 个答案:

答案 0 :(得分:1)

你的正则表达式

inputValue.matches("[\\w]*[\\s]*[-][\\s]*[\\w]*")

赢得与sec 30-31匹配,因为它与alphanumerics + whitespaces + - + whitespaces + alphanumerics匹配。如你所见,没有数字的地方。

您需要在管道&#34;

中添加另一个matches()
inputValue.matches("[a-zA-Z]+\\s+\\d+-\\d+")

IDEONE demo返回true

下面,

  • [a-zA-Z]+ - 匹配1个或多个拉丁字母
  • \\s+ - 匹配1个或多个空格
  • \\d+ - 匹配1位或更多位数
  • - - 匹配文字连字符
  • \\d+ - 匹配1位或更多位数。