使用 pattern/matcher 提取子串

Using pattern/matcher to extract a substring

我想在 java 中使用正则表达式和 matcher 获取以 TKK_ 开头的子字符串。字符串其实就是一个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

您可以使用

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个或多个数字。

请注意,在字符串末尾使用惰性量化模式几乎不是您想要的,因为它匹配 最小 个字符到 return 个有效字符比赛。因此,模式末尾的 .+? 将始终只匹配 1 个字符。模式末尾的 .*? 将匹配空字符串。

并且一定要记住使用 .find().matches() 实际上 运行 Matcher ,否则,您将无法访问任何组,因为尚未找到匹配项。