我试图强制验证包含前两个字母为字母且接下来四个为数字的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,如果它不应该。有什么想法吗?
答案 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"
。