如何将模式与完整的字符串相匹配?

时间:2013-04-30 02:54:34

标签: java regex

如何为“空字符串或'创建的新条目'指定正则表达式模式是一个子字符串”?

我尝试了(new entry created|)但是Matcher.find()模式在输入上是真的,如:

  

     

无效级别

     

有效等级范围是0-14。

     

是执行直接编程的选项,例如

String.isEmpty() || String.contains("new entry created")

因为相同的方法将具有不同的模式作为输入。换句话说,我需要在这种情况下使用正则表达式。 我想坚持使用Matcher.find(),因为我将使用其他错误模式 - 例如“无效”。

4 个答案:

答案 0 :(得分:3)

您只需要使用 start end 分隔符包围“空”部分,以便将搜索限制为输入的完全匹配:

(new entry created|^$)

答案 1 :(得分:2)

您的模式很好(对于Java),只需使用Matcher.matches()而不是Matcher.find()

来自Class Matcher documentation

  • matches 方法尝试将整个输入序列与模式匹配。

  • lookingAt 方法尝试将输入序列(从头开始)与模式匹配。

  • find 方法扫描输入序列,寻找与模式匹配的下一个子序列。

所以,问题是,find方法会在任何字符串中找到空字符串替代。要在Java中查找完全匹配,请使用matches()方法。

答案 2 :(得分:1)

你好试试这个模式......

(new entry created)|(^$)

我已经测试了这段代码

public static void main(String[] argv) {
    String pattern = "(new entry created)|(^$)";
    String input = "";
    Pattern p = Pattern.compile(pattern);
    boolean found = p.matcher(input).lookingAt();
    System.out.println("'" + pattern + "'"
            + (found ? " matches '" : " doesn't match '") + input + "'");
}

答案 3 :(得分:1)

如果您的要求实际上与

匹配
  • 包含new entry created
  • 的字符串
  • 一个空字符串

然后你可以使用

^(?:.*new entry created.*)?$

或(如果您的字符串可能包含换行符)

(?s)^(?:.*new entry created.*)?$

在Java中,您拥有.matches()方法,可以删除锚点:

Pattern regex = Pattern.compile("(?:.*new entry created.*)?", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(subjectString);
foundMatch = regexMatcher.matches();