原始正则表达式:[v]\d+?\.\d
捕获" v {N}。{n}"在{N} / {n}只是一个数字的字符串中。我尝试使用代码(java)但返回false。
代码:
String content = "En este texto hay un documento v4.6.pdf";
String pattern = "[v]\\d+?\\.\\d";
boolean isMatch = Pattern.matches(pattern, content);
System.out.println("The text contains 'v{N}.{n}'? " + isMatch);
控制台:
The text contains 'v{N}.{n}'? false
答案 0 :(得分:3)
matches
尝试匹配整个String。您应该使用find
的{{1}}方法来尝试查找匹配项。或者您可以尝试使用Matcher
作为后缀和前缀匹配整个字符串。
.*
O / P:
public static void main(String[] args) throws Exception {
String content = "En este texto hay un documento v4.6.pdf";
Pattern p = Pattern.compile("[v]\\d+?\\.\\d");
Matcher m = p.matcher(content);
if (m.find()) {
System.out.println("found");
}
}
答案 1 :(得分:1)
正如其他人所指出的那样,Pattern.matches()
会尝试匹配整个字符串。即好像在模式的开头有^
,最后有$
。所以你可以做以下两个中的任何一个:
.*
添加到模式的两端:String pattern = ".*[v]\\d+?\\.\\d.*";
Matcher.find()
:String pattern = "[v]\\d+?\\.\\d";
Pattern regexPattern = Pattern.compile(pattern);
Matcher matcher = regexPattern.matcher(content);
boolean isMatch = matcher.find();