获取网址http://www.abc.com/alpha/beta/33445566778899/gamma/delta
我需要返回数字33445566778899
(删除正斜杠,数字可变长度但介于10和20位之间)
足够简单(或者我认为),除了我尝试过的所有内容似乎都不起作用,但为什么呢?
Pattern pattern = Pattern.compile("\\/([0-9])\\d{10,20}\\/");
Matcher matcher = pattern.matcher(fullUrl);
if (matcher.find()) {
return matcher.group(1);
}
答案 0 :(得分:1)
试试这个单行:
String number = url.replaceAll(".*/(\\d{10,20})/.*", "$1");
答案 1 :(得分:0)
这个正则表达式有效 -
"\\/(\\d{10,20})\\/"
测试 -
String fullUrl = "http://www.abc.com/alpha/beta/33445566778899/gamma/delta";
Pattern pattern = Pattern.compile("\\/(\\d{10,20})\\/");
Matcher matcher = pattern.matcher(fullUrl);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
输出 - 33445566778899
答案 2 :(得分:0)
尝试,
String url = "http://www.abc.com/alpha/beta/33445566778899/gamma/delta";
String digitStr = null;
for(String str : url.split("/")){
System.out.println(str);
if(str.matches("[0-9]{10,20}")){
digitStr = str;
break;
}
}
System.out.println(digitStr);
输出:
33445566778899
答案 3 :(得分:0)
不应该说“似乎不起作用”,而应该使用它返回的内容。测试它确认了我的想法:您的代码将为此输入返回3
。
这只是因为您所写的正则表达式将捕获/
之后的数字,然后是10到20位数字,然后是/
。
你想要的正则表达式是"/(\\d{10,20})/"
(你不需要逃避/
)。下面你会找到我测试过的代码。
public static void main(String[] args) {
String src = "http://www.abc.com/alpha/beta/33445566778899/gamma/delta";
Pattern pattern = Pattern.compile("/(\\d{10,20})/");
Matcher matcher = pattern.matcher(src);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
}