2011-03-26 4 views
3

알 수없는 횟수로 입력에 나타날 수있는 패턴을 인식하는 Java 프로그램에서 사용할 정규 표현식을 작성하려고합니다. 내 어리석은 작은 예입니다 알 수없는 반복 그룹을 캡처하는 정규식

String patString = "(?:.*(h.t).*)*";

가 그럼 난 matcher.group (I) 통해 반복에 의해 "오두막이 뜨겁다"와 같은 라인에서 경기를 액세스 해보십시오. 하나의 캡처 그룹 만 있기 때문에 마지막 일치 (이 경우에는 "hot")를 기억합니다. 캡처 그룹이 다시 사용될 때 matcher.group (1)의 내용을 덮어 쓰게됩니다. 내가 원하는 것은 을 포함하는 일종의 배열이고 "hut"과 "hot"입니다.

더 좋은 방법이 있나요? FWIW, 내가 정말로하려고하는 것은 신호 단어 다음에 다른 단어와 구두점이있을 수있는 모든 (아마도 다중 단어) 고유 명사를 선택하는 것입니다. 그래서 "톱"이 신호이고 우리는 "나는 존 스미스와 그의 아내 마가렛과 밥을 보았습니다."나는 "밥", "존 스미스", "마가렛"을 원합니다.

+0

패턴 문자열로'h.t' 만 사용하면 어떨까요? – vbence

+0

'(h.t)'만 사용하면 (캡처 그룹으로 만들려면 괄호로 묶음), 마지막 것 대신 첫 번째 항목 만 얻습니다. (그게 니가 의미 한거야?) – umbraphile

+0

나는 이걸 내가 여기까지 물었다. http://stackoverflow.com/questions/5018487/regular-expression-with-variable-number-of-groups – aioobe

답변

6

(유사 질문 : Regular expression with variable number of groups?)

이 불가능합니다. 가장 좋은 대안은 h.t를 사용하고

while (matcher.find()) { 
    ... 
    ... matcher.group(1); ... 
    ... 
} 

이 기능 does exist in .NET을 사용하는 것입니다,하지만 위에서 언급 한 바와 같이, 자바에는 대응 없습니다.

+0

오케이 - 모자/오두막/뜨거운 예제로 이것을 시도했지만 괜찮습니다. 실제보다 복잡한 현실적인 문제로 변환해야합니다! 감사. – umbraphile

관련 문제