【问题标题】:Regular Expression Matching Java正则表达式匹配 Java
【发布时间】:2017-09-12 20:10:59
【问题描述】:

我正在处理正则表达式匹配问题。问题是,我想匹配一个超过 7 个的字符串(任何字符,包括数字、字母、特殊字符)。我正在使用下面的表达式(我删除了开头和结尾符号),但没有像我想象的那样工作。有什么想法吗?

"((\\w|W){7,})"

Java 代码:

        final String VALID_REGEX =
            "^((\\w{2,6})" // 2 to 6 characters
                    + "(?:[\\r\\n]{1,3})" // 1 or 3 carriage returns
                    + "([\\w\\W]{7,})" // equal to or more than 7 characters or spaces
                    + "(?:[\\r\\n]{1,3})" // 1 or 3 carriage returns
                    + "(?:[\\w\\W])*"; // Any text
    Pattern regExPattern = Pattern.compile(VALID_REGEX, Pattern.DOTALL);
    String content = new String(Files.readAllBytes(Paths.get("/home/hqu/Downloads/test.txt")));
    Matcher noMatcher = regExPattern.matcher(content);
    if(noMatcher.matches())
        System.out.println("match");
    else
        System.out.println("not match");

输入:

不匹配

匹配

【问题讨论】:

  • W 仅匹配 W\w 匹配字母、数字和 _。现在,确切的要求是什么?你能提供一些示例输入吗?
  • 你可以用这个\\b\\w{7,}\\b
  • 但是为什么是正则表达式?你不能用length()检查吗?
  • @LeonardoAlvesMachado [\w\W]{7,}(?s:.{7,}) 相同,但更糟糕的是,这是一种解决方法,自定义字符类的效率低于打开 DOTALL 模式的内置 .
  • @TommyQu 这意味着问题出在你的超级秘密模式的另一部分。请以某种方式混淆它,然后发布它。我怀疑你有一些匹配少于 7 个字符的替代方案。

标签: java regex expression


【解决方案1】:

不太清楚,但是替换

"([\w\W]{7,})"

"([\w| ]{7,})"

适用于我的测试用例。

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2015-06-03
    • 2011-02-17
    • 2011-01-24
    相关资源
    最近更新 更多