2014-06-14 3 views
2

아래 입력 문자열에서 반복 그룹을 찾는 쿼리가 있습니다.여러 번 Java 정규 표현식에서 그룹 발생

목표 : 광고가 4 개 이상 발행 수 있어야

. 키 : 값] 쌍 (직사각형 중괄호)

입력 :

<2014/06/14-11:03:06.695>[email protected]: [Process Name : Nav Calculations] [Total Time : 7 ms][Wait Time : 0 ms][Execution Time : 7 ms]. 

니펫

final Pattern p = Pattern.compile("(\\[.*?\\]){4,}"); 
final Matcher m = p.matcher(s); 
while (m.find()) { 
    System.out.println(m.group()); 
} 

위의 스 니펫으로 matcher 일치를 찾을 수 없습니다.

그러나 패턴을 "(\\[.*?\\]){3}")"으로 변경하면 아래 값이 반환됩니다.

[Process Name : Nav Calculations] [Total Time : 7 ms][Wait Time : 0 ms][Execution Time : 7 ms] 

정규식에 관한 이전 게시물도 읽었습니다. 그러나 couldnt는 내가 무엇이 여기에서 없는지에 관해 이해한다.

일반 표현식 "(\\[.*?\\]){4,}"이 작동하지 않는 이유는 무엇입니까? 내 목표를 달성하기 위해이 정규 표현식에서 무엇을 변경해야합니까?

친절하게 여기에서 나를 안내합니다.

답변

2

그룹 사이에 공백이 있기 때문에 첫 번째 일치 항목을 찾을 수 없습니다.

당신은 여기에 공간이 있습니다 결과

[Process Name : Nav Calculations] [Total Time : 7 ms][Wait Time : 0 ms][Execution Time : 7 ms] 
           ^space 

을, 당신은 다른 사람 후에 정확히 하나를 중괄호의 4 개 세트를 일치하지 않을 수 있습니다. 공간이 일치해야합니다.

(?:\[.*?\]\s*){4} // This works! 

이유는 무엇입니까 (?:\[.*?\]){3} 경기를 네 그룹 : 당신이 당신의 정량화 그룹의 선택적 공간이 있다면

는, 다른 한편으로는, 정규식

당신은 수와 일치 고정?

  1. 도트 스타가이 공간 위로 뛰어 넘을 수 있습니다.
  2. 첫번째 인스턴스 [Process Name : Nav Calculations] [Total Time : 7 ms]
  3. 번째 일치 [Wait Time : 0 ms]
  4. 번째 일치 [Wait Time : 0 ms][Execution Time : 7 ms]

참조 일치

물품 아래에 남아있는 혼란을 제거 할 수있다.대신 공백을 대체

The Many Degrees of Regex Greed

+0

, 패턴을 맞추어 공간을 고려하지 정규 표현식을 알 수있는 방법이 있나요. – David

+0

@ user3739735 답변을 강화했습니다 (자세한 설명 참조). ''공백을 고려하지 않는다 ''고 말할 때, 내가 말했던 새로운 정규식과 같은 뜻인가요? – zx81

+0

고마워요 !!! 귀하의 답변은 매우 명확합니다! – David

관련 문제