使用pattern / matcher提取子字符串

时间:2017-07-18 08:14:52

标签: java regex matcher

我希望在java中使用正则表达式和TKK_来获取以matcher开头的子字符串。该字符串实际上是一个URL,例如

http://somewhere.com/core?item=TKK_43123

到目前为止,我是基于此example

写的
String pattern = "TKK_.+?";
Pattern r = Pattern.compile(pattern );
Matcher m = r.matcher(url);

但是打印m.group(1)No match found。我想得到TKK_43123

1 个答案:

答案 0 :(得分:2)

您可以使用

String pattern = "TKK_\\d+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher("http://somewhere.com/core?item=TKK_43123");
if (m.find()){
    System.out.println(m.group(0)); 
} 
// => TKK_43123

请参阅Java demo

\d+将匹配TKK_之后的1位或更多位数。

请注意,在字符串末尾使用延迟量化的模式几乎不会是您想要的,因为它匹配 minimal 个字符数以返回有效匹配。因此,模式末尾的.+?始终只匹配1个字符。模式末尾的.*?将匹配一个空字符串。

当然要记得使用.find().matches()实际运行 匹配器,否则,您将无法访问任何群组,因为尚未找到匹配。