parkerqian
parkerqian

Reputation: 631

how to deal with a string with regex

for example: I have a string like this: http://shop.vipshop.com/detail-97996-12358781.html

I want to use regex to find 97996 and 12358781 java code is appreciated Many thanks.

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

but it was wrong

Upvotes: 0

Views: 110

Answers (7)

very9527
very9527

Reputation: 959

You should add

if(matcher.find()){

}

on

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

then your code is:

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

Upvotes: 0

Melih Altıntaş
Melih Altıntaş

Reputation: 2535

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

output:

97996 12358781

Upvotes: 1

Bohemian
Bohemian

Reputation: 424993

Two lines:

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

Upvotes: 1

Rahul Kulhari
Rahul Kulhari

Reputation: 1165

you can use this:

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

for advance tutorial go to this link

RegEx tutorial

and Regular Expression tutorial

Upvotes: 0

mira_mayhem
mira_mayhem

Reputation: 155

You have used a quantifier (5) and still the 1235... is 8 characters long? Is it always 5 and 8 can you use:

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

The matches captured into backreferences

But if you need to find in the specific form detail-NUMBER-NUMBER.html you can use:

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

The matches captured in [1] and [2]

Upvotes: 0

Rohit Jain
Rohit Jain

Reputation: 213223

You have to invoke either Matcher#find() or Matcher#matches() to actually get the matches. In this case, you would need the former one, as you are only finding a part of string matching the regex.

And you can use + quantifier to get any length of digit. Try using this:

String regex ="\\d+";
Pattern pattern  = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}

Upvotes: 1

Raghuram
Raghuram

Reputation: 3967

Try this

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

Upvotes: 1

Related Questions