使用 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
\d+
将匹配TKK_
之后的1个或多个数字。
请注意,在字符串末尾使用惰性量化模式几乎不是您想要的,因为它匹配 最小 个字符到 return 个有效字符比赛。因此,模式末尾的 .+?
将始终只匹配 1 个字符。模式末尾的 .*?
将匹配空字符串。
并且一定要记住使用 .find()
或 .matches()
实际上 运行 Matcher ,否则,您将无法访问任何组,因为尚未找到匹配项。
我想在 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
\d+
将匹配TKK_
之后的1个或多个数字。
请注意,在字符串末尾使用惰性量化模式几乎不是您想要的,因为它匹配 最小 个字符到 return 个有效字符比赛。因此,模式末尾的 .+?
将始终只匹配 1 个字符。模式末尾的 .*?
将匹配空字符串。
并且一定要记住使用 .find()
或 .matches()
实际上 运行 Matcher ,否则,您将无法访问任何组,因为尚未找到匹配项。