0

例如:我有一个这样的字符串: http: //shop.vipshop.com/detail-97996-12358781.html

我想使用正则表达式来查找 97996 和 12358781 java 代码不胜感激 非常感谢。

    String str="http://shop.vipshop.com/detail-97996-12358781.html";
    String regex ="\-d{5}\-";
    Pattern pattern  = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    System.out.println(matcher.group());  

但这是错误的

4

7 回答 7

1
String str = "http://shop.vipshop.com/detail-97996-12358781.html";
String regex = "(?<=detail-)(\\d+)-(\\d+)(?=\\.html)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
matcher.find();
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));

输出:

97996 12358781

于 2013-09-02T13:50:45.347 回答
1

您必须调用其中一个Matcher#find()Matcher#matches()实际获取匹配项。在这种情况下,您将需要前一个,因为您只能找到与正则表达式匹配的字符串的一部分。

您可以使用+量词来获取任意长度的数字。尝试使用这个:

String regex ="\\d+";
Pattern pattern  = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}
于 2013-09-02T09:01:49.697 回答
1

尝试这个

String str="http://shop.vipshop.com/detail-97996-12358781.html";
String regex =".*detail-(\\d+)-(\\d+).html";
Pattern pattern  = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if(matcher.matches()){
   System.out.println(matcher.group(1) + "|" + matcher.group(2));
}
于 2013-09-02T08:59:57.173 回答
1

两行:

String num1 = str.replaceAll(".*-(\\d+)-.*", "$1");
String num2 = str.replaceAll(".*-(\\d+)\\..*", "$1");
于 2013-09-02T09:27:30.937 回答
0

你可以使用这个:

String str="http://shop.vipshop.com/detail-97996-12358781.html";
    String regex ="[^0-9]+([0-9]+)[^0-9]+([0-9]+).+";
    Pattern pattern  = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    if(matcher.matches()){
       System.out.println(matcher.group(1) + " " + matcher.group(2));
    }

有关高级教程,请访问此链接

正则表达式教程

正则表达式教程

于 2013-09-02T09:14:22.477 回答
0

您使用了量词 (5),但 1235... 仍然是 8 个字符长?是否总是 5 和 8 可以使用:

"([\\d]{5,8})"

捕获到反向引用中的匹配项

但是,如果您需要在特定表单中查找 detail-NUMBER-NUMBER.html,您可以使用:

"detail-([\\d]*)-([\\d]*).html"

[1] 和 [2] 中捕获的匹配项

于 2013-09-02T09:05:15.553 回答
0

你应该添加

if(matcher.find()){

}

System.out.println(matcher.group());

那么你的代码是:

String str="http://shop.vipshop.com/detail-97996-12358781.html";
String regex ="\\d{5,}";
Pattern pattern  = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if(matcher.find()){
   System.out.println(matcher.group());
}
于 2013-09-02T14:34:22.087 回答