2

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

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

"

无效级别

有效电平范围为 0-14。

"

做直接编程不是一种选择

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

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

4

4 回答 4

3

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

(new entry created|^$)
于 2013-04-30T03:06:03.907 回答
2

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

类匹配器文档中:

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

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

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

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

于 2013-04-30T05:54:19.833 回答
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 + "'");
}
于 2013-04-30T03:09:15.870 回答
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();
于 2013-04-30T14:50:36.933 回答