Java 正则表达式。奇怪的行为

标签 java regex

任何人都可以帮忙处理正则表达式吗?这段代码运行良好。

public static void main(String[] args) {

    String s = "with name=successfully already exist\n";

    Pattern p = Pattern.compile(".+name=.*successfully.+", Pattern.DOTALL);
    java.util.regex.Matcher m = p.matcher(s);

    if (m.matches()) {
        System.out.println("match");
    } else {
        System.out.println("not match");
    }

}

但是这段代码返回“不匹配”。为什么?

public static void main(String[] args) {

    String s = "with name=successfully already exist\n";

    if (s.matches(".+name=.*successfully.+")) {
        System.out.println("match");
    } else {
        System.out.println("not match");
    }

}

最佳答案

两者之间的唯一区别是第一个示例中的 DOTALL 标志。

如果没有该标志,字符串末尾的 \n 将与最后一个模式 (.+) 不匹配。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#DOTALL

In dotall mode, the expression . matches any character, including a line terminator. By default this expression does not match line terminators.

请注意,matches 尝试匹配整个字符串(包括您的情况下的尾随换行符),而不仅仅是尝试查找子字符串(这在 Java 中与许多其他语言不同)。

关于Java 正则表达式。奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15948247/

相关文章:

regex - 如何使用正则表达式匹配特定的数字范围

c# - 禁止对 Dropbox 使用正则表达式的特定字符

java - Zookeeper不会清理已删除的节点

java - 如何动态获取主题名称然后从中读取

java - "key"在Java HashMap中存储了两次吗?

c# - 正则表达式格式返回空结果 - C#

javascript - 来自 URL 的正则表达式 URL 路径

PHP:如何将 in_array 与正则表达式字符串数组一起使用?

java - 根据相似性对字符串进行排序

java - 在不使用任何第三方的情况下将 map 数据映射到同一卡片 View 中的 Recyclerview Adapter