我想使用java regex从给定的URL中获取一个数字。
问题是模式应该出现在URL的中间。
如何修复我的正则表达式?
Pattern p = Pattern.compile("[.w]*/pins/[.d]+/edit");
Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit");
while (m.find()) {
String id = m.group();
}
答案 0 :(得分:2)
如果您希望匹配4997
并且Pattern
没有限制来验证URL
(无论如何都不应该使用正则表达式),那么你可以使用基于" lookarounds"的简单解决方案:
String url = "https://mysite.com/providers/271/pins/4997/edit";
// | preceded by "pins/"
// | | 1 or more digits
// | | | followed by "/edit"
Pattern p = Pattern.compile("(?<=pins/)\\d+(?=/edit)");
Matcher m = p.matcher(url);
if (m.find()) {
// | whole group will only capture "\\d+"
System.out.println(m.group());
}
<强>输出强>
4997
答案 1 :(得分:1)
如果要捕获引脚之间的数字并编辑,请尝试以下正则表达式
(?<=pins\/)(\d+)(?=\/edit)
Java正则表达式,
"(?<=pins\\/)(\\d+)(?=\\/edit)"
您的Java代码将是,
String s = "https://mysite.com/providers/271/pins/4997/edit";
Pattern p = Pattern.compile("(?<=pins/)(\\d+)(?=/edit)");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
输出:
4997
答案 2 :(得分:1)
尝试使用正则表达式模式中的微小更改pins/(\d+)/edit$
。
此处$
表示行的结尾,括号()
用于对pins
和edit
内匹配的数字进行分组。
示例代码:
Pattern p = Pattern.compile("pins/(\\d+)/edit$");
Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit");
if (m.find()) {
String id = m.group(1);
System.out.println(id); // 4997
}
您也可以使用String#split()
方法。
示例代码:
String str = "https://mysite.com/providers/271/pins/4997/edit";
String[] arr = str.split("/");
System.out.println(arr[arr.length - 2]); // 4997