2014-08-28 2 views
0

문자 시퀀스가있는 정규식이 있습니다. 시퀀스 부분을 그룹으로 만들고 싶습니다.Java Regex {X}에 대한 그룹 캡처

Pattern e_1394Pattern = Pattern 
     .compile("\\dR\\|\\d\\|(((([^\\|]))*\\|){11})"); 

String resultLine = "\4R|1|^^^02^Myo^1021406330|25.6^F|ng/mL||N||F||Administrator||20140318215839|"; 

이 패턴은 정상적으로 작동하지만 다음 파트의 그룹이 필요합니다. (((([^\\|]))*\\|){11}). 짧은 정규식을 사용하면 가능합니까?

에는 옵션입니다 : \\dR\\|\\d\\|((([^\\|]))*\\|) ((([^\\|]))*\\|) ((([^\\|]))*\\|) ((([^\\|]))*\\|)....

+0

중복 가능성 ([자바 정규식 포착기를 반복] http://stackoverflow.com/questions/6939526/java-regex-repeating-capturing-groups) – Joe

+0

죄송합니다, 나는 그것이 같지 않다고 생각합니다 ... 나는 '(ab) {n}'의 반복 된 부분을 그룹으로 원합니다. 이 결과는 하나의 그룹 'ab'입니다. –

답변

0

내가 확실하지 당신의 필요를 이해하지만 방법에 대한 :

당신은 정규식에 따라 그룹 1에 사용되는 패턴을 반복 할 것이다 (?1) 또는 \g1와 패턴을 반복 할 수 있습니다 맛. 귀하의 경우

:

"\\dR\\|\\d\\|(((([^\\|]))*\\|){11})" 

은 (그룹화 불필요한 제거)와 동일하다 :

"\\dR\\|\\d\\|([^\\|]*\\|)(?1)(?1)(?1)(?1)(?1)(?1)(?1)(?1)(?1)(?1)" 
+0

Java는 서브 루틴 호출을 지원하지 않습니다. Java 8의 경우는 아닙니다. –

+0

@ AlanMoore : 너무 나빴습니다 :(다른 언어를 다루는 사람들에게 답을 알려줍니다. – Toto