正则表达式isMatch返回false

时间:2017-10-03 09:38:42

标签: java regex

原始正则表达式:[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

2 个答案:

答案 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()会尝试匹配整个字符串。即好像在模式的开头有^,最后有$。所以你可以做以下两个中的任何一个:

1。将.*添加到模式的两端:

String pattern = ".*[v]\\d+?\\.\\d.*";

2。使用Matcher.find()

String pattern = "[v]\\d+?\\.\\d";
Pattern regexPattern = Pattern.compile(pattern);
Matcher matcher = regexPattern.matcher(content);
boolean isMatch = matcher.find();