如何使用正则表达式处理字符串

时间:2013-09-02 08:54:58

标签: java regex

例如: 我有一个像这样的字符串: 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());  

但是错了

7 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分: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());
}

答案 2 :(得分:1)

两行:

String num1 = str.replaceAll(".*-(\\d+)-.*", "$1");
String num2 = str.replaceAll(".*-(\\d+)\\..*", "$1");

答案 3 :(得分: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

答案 4 :(得分:0)

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

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

捕获到后向引用中的匹配

但是,如果您需要在特定表单中找到详细信息-NUMBER-NUMBER.html,则可以使用:

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

[1]和[2]

中捕获的匹配项

答案 5 :(得分: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));
    }

高级教程请转到此链接

RegEx tutorial

Regular Expression tutorial

答案 6 :(得分:0)

你应该添加

if(matcher.find()){

}

on

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());
}