-1

我有一个要求,我想从一个长字符串中获取两个不同的项目。我有以下程序,当我执行 group(1) 和 group(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。

谢谢

4

2 回答 2

3

这应该这样做

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

使?:()捕获。

于 2013-04-05T12:21:36.613 回答
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));
}
于 2013-04-05T12:19:12.593 回答