【问题标题】:Regular expression not working despite testing尽管经过测试,正则表达式不起作用
【发布时间】:2014-04-29 19:36:21
【问题描述】:

我正在尝试强制验证一个 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 进行正确验证,而实际上它不应该接受。大家有什么想法吗?

【问题讨论】:

  • 字符串中应该是\\b吗?
  • 是的,您需要转义反斜杠。
  • / 是一个正则表达式字符串分隔符。所以你不应该同时拥有/"。除此之外,这取决于您使用的是什么语言——这是什么?
  • @KyleStrand 看起来像 Java
  • 确实是Java

标签: java regex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的问题本质上是 Java 对 Regex 并不那么友好。您需要处理 Java 字符串的限制,以便创建可用作正则表达式模式的字符串。由于\ 是正则表达式中的转义字符 Java 字符串中的转义字符(并且由于there's no such thing as a raw string literal in Java),您必须双重转义任何必须在正则表达式,以便在 Java 字符串中创建文字 \ 字符,当被解析为正则表达式模式时,将被正确地视为转义字符。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      相关资源
      最近更新 更多