尽管测试,正则表达式仍然无效

时间:2014-04-29 19:36:21

标签: java regex

我试图强制验证包含前两个字母为字母且接下来四个为数字的ID,可以有一个0即0333但永远不会是0000的完整零,因此像ID0000这样的东西是不允许。我提出的表达似乎在网上测试时检查出来,但在尝试在程序中强制执行时似乎没有用:

\b(?![A-Z]{2}[0]{4})[A-Z]{2}[0-9]{4}\b

并且是我目前用于实现它的代码:

String pattern = "/\b(?![A-Z]{2}[0]{4})[A-Z]{2}[0-9]{4}\b/";
Pattern regEx = Pattern.compile(pattern);
String ingID = ingredID.getText().toString();
Matcher m = regEx.matcher(ingID);

if (m.matches()) {
    ingredID.setError("Please enter a valid Ingrediant ID");
}

出于某种原因,它似乎无法正确验证接受id0000之类的ID,如果它不应该。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

将正则表达式模式更改为"\\b(?![A-Z]{2}[0]{4})[A-Z]{2}[0-9]{4}\\b"

答案 1 :(得分:0)

你的问题基本上是Java不是Regex友好的;您需要处理Java字符串的限制,以便创建可用作Regex模式的字符串。由于\是Regex 中的转义字符,而是Java字符串中的转义字符(以及there's no such thing as a raw string literal in Java),因此您必须双重转义必须在正则表达式中进行转义才能在Java字符串中创建文字\字符,当解析为正则表达式模式时,它将被正确地视为转义字符。

因此,例如,正则表达式模式/\b/(其中/,如我的评论中所述,划分模式本身)将在Java中表示为字符串 "\\b"