2013-04-05 112 views
-1

我有一个要求,我想在两个不同的项目形成一个长字符串。 我已经得到了下面的程序,当我做组(1)和组(6)时,我获得了必需的项目。 但我想在组(1)和组(2)中得到它。正则表达式与两个模式

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class RegexExample { 
public static void main(String args[]) { 
    String somepattern = "((123|456)-(0|1)-((\\d-?){8})-\\d{1})/(\\d{2})"; 


    String str = "/somethingwaste/123-0-1234-5678-9/10"; 
    Matcher p = Pattern.compile(somepattern).matcher(str); 
    while (p.find()) { 
    System.out.println(p.group(1)); 
    System.out.println(p.group(6)); 
    } 

任何指针方向appriciated。

感谢

+2

魔术字是'非捕获组'。请在正则表达式文档中查找它。 – Ingo 2013-04-05 12:19:30

+0

如果你有问题,并决定用正则表达式解决它,那么你有两个问题=) – svz 2013-04-05 12:26:12

回答

2

只是要组你不想继续使用non-capturing?:

String somepattern = "((?:123|456)-[01]-(?:\\d-?){8}-\\d)/(\\d{2})"; 
String str = "/somethingwaste/123-0-1234-5678-9/10"; 
Matcher p = Pattern.compile(somepattern).matcher(str); 
while (p.find()) { 
    System.out.println(p.group(1)); 
    System.out.println(p.group(2)); 
} 
3

这应该这样做

String somepattern = "((?:123|456)-[01]-(?:\\d-?){8}-\\d)/(\\d{2})"; 

?:使得()非捕获。

+0

在我看来这是一个更好的答案,因为它消除了模式中的冗余。 – nhahtdh 2013-04-05 13:21:33