2013-04-05 3 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)); 
    } 

모든 방향을 설명합니다.

감사

+2

마법 단어는 '비 캡처 그룹'입니다. Regex 문서에서 찾아 보시기 바랍니다. – Ingo

+0

문제가 있고 그것을 정규식으로 해결하기로 결정한 경우 두 가지 문제가 있습니다. =) – svz

답변

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

관련 문제