【发布时间】: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