2013-09-02 2 views
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()); 

, но это было неправильно

+0

Вы пришли из Китая – very9527

ответ

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

Вы должны вызвать либо 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()); 
} 
+0

+1, я собирался добавление этого регулярного выражения;) – sp00m

0

Вы использовали квантификатор (5) и еще 1235 ... длиной 8 символов? Является ли это всегда 5 и 8 можно использовать:

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

спичками захваченных в обратные

Но если вам нужно найти в специфической форме предметно-NUMBER-NUMBER.html вы можете использовать:

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

спички, захваченные в [1] и [2]

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

1

Две линии:

String num1 = str.replaceAll(".*-(\\d+)-.*", "$1"); 
String num2 = str.replaceAll(".*-(\\d+)\\..*", "$1"); 
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)); 

выход:

9799612358781

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()); 
} 
Смежные вопросы