2015-01-01 5 views
2

나는 다음과 같은 텍스트가 :여러 정규식은 문자열에서 일치

나는 자바 루프에서 정규식 문자열 1과 문자열 2에 맞게 좋아
bla [string1] bli [string2] 

.

Howto?

내 첫 번째 문자열 1과 일치 지금까지 코드,하지만 또한 문자열 2

String sRegex="(?<=\\[).*?(?=\\])"; 
     Pattern p = Pattern.compile(sRegex); // create the pattern only once, 
     Matcher m = p.matcher(sFormula); 
     if (m.find()) 
     { 
      String sString1 = m.group(0); 
      String sString2 = m.group(1); // << no match 
     } 

답변

1

귀하의 정규식 따라서 던져 예외이 호출 어떤 캡처 그룹을 사용하지 않는 :

m.group(1); 

당신은 그냥 사용할 수 있습니다 사용 :

String sRegex="(?<=\\[)[^]]*(?=\\])"; 
Pattern p = Pattern.compile(sRegex); // create the pattern only once, 
Matcher m = p.matcher(sFormula); 
while (m.find()) { 
    System.out.println(m.group()); 
} 
또한

if이 있어야 할 REPL while에 의해 aced하여 여러 번 일치하는 모든 일치를 반환합니다.

+0

나를 위해 작동하지 않습니다 . 그게 내 문제 야. 코드는 첫 번째 문자열과 만 일치합니다. Howto는 두 번째 string2와의 매칭을 위해 이것을 수행합니까? [?]에 대한 모든 일치 항목을 문자열로 갖고 싶습니다. –

+0

'if'를'while'으로 대체하여 여러 번 일치시켜 모든 일치 항목을 반환해야합니다. – anubhava

+0

확인. 내가 참조. 고마워. 문제는 힌트로 해결됩니다. 친절하신 분 –

1

당신의 접근 방식은 혼란 스럽습니다. 하나의 패턴에 두 개의 [....] 시퀀스가 ​​일치하도록 정규 표현식을 작성하거나 find 번으로 여러 번 호출하십시오. 귀하의 현재 시도는 하나의 [...] 시퀀스를 "발견"하는 정규식을가집니다. 이 같은

시도 뭔가 :

Pattern p = Pattern.compile("\\[([^\\]]+)]"); 
    Matcher m = p.matcher(formula); 
    if (m.find()) { 
     String string1 = m.group(0); 
     if (m.find(m.end()) { 
      String string2 = m.group(0); 
     } 
    } 

또는 루프 추출 된 문자열에 대한 String의 배열을 사용하여 일반화.

는 (이 경우에는 어떤 멋진 모습 숨김 패턴이 필요하지 않습니다. 그리고 추한 "헝가리어 표기법은"자바에 눈살을 찌푸렸다, 그래서 그것을 사용하는 습관을 나가.)

+0

이것이 바로 제 문제입니다. Howto는 문자열의 모든 [?]와 일치하는 정규 표현식을 작성합니다. 귀하의 정규식을 시도했지만 그것은 오류를 던졌습니다 java.util.regex.PatternSyntaxException : 인덱스 근처에 그룹을 공개하지 않습니다. 내가 좋아하는 것은 모든 문자열을 큰 문자열의 대괄호로 가져 오는 howto입니다. 나도 몰라, 내가 물어 보는 이유 :-) –

+0

문제가 해결되었습니다. 감사. –

+0

나는 정규식을 고쳤다 ... –