2013-09-25 2 views
2

하나 이상의 2 등호 사이의 텍스트를 추출해야합니다 (예 : ==, ===, ===, ==== 등).) 및 다음 텍스트를 검색하여 다음 또는 하나 이상의 같음을 검색하고 배열 목록에 저장합니다.자바에서 2 "=="이상의 패턴을 제외하기위한 정규식

예 :

==Notes and references== {{Refli=st|35e=m}}=====Bibliography=====Text starts 

예상 출력 :

: 그것은 하나 =을 만날 때까지 내가 무엇입니까

"==+([^==+]*)==+([^==+]*)"; 

출력 : 내가 정규식 구문을 가지고있다

[==Notes and references== {{Refli=st|35e=m}}, =====Bibliography=====Text starts] 

[==Notes and references== {{Refli, =====Bibliography=====Text starts] 

답변

2

[^==+]*=+을 제외한 모든 문자와 일치합니다. 이것은 당신이 원하는 것이 아닙니다. 당신은 여러 = 사이에서 하나의 = 표시를 허용 할 수 있도록

"==+(.*?)==+(.*?)(?===|$)"; 

: 여기

, 같은 것을 사용하는 것이 더 쉬울 수 있습니다.

(?===|$)은 긍정적 인 미리보기 ((?= ...))이며 앞에 두 개의 연속적인 부호가 있거나 문자의 끝이 있는지 확인합니다. 당신은 당신이 부정적인 lookaheads 사용할 수 있습니다 사이에 특히 부품의 ==+을 부정하려는 경우


는 또는 : 모든 문자를 확인하고 있는지 확인합니다

"==+((?:(?!==+).)*)==+((?:(?!==+).)*)"; 

이 구문 ((?:(?!==+).)*)을 그것은 아니다 == (이상)

+0

Jerry 감사합니다. 내가 원했던대로 작동하게했다. "== + (. *?) == + (. *?) (? === | $)"에서 (? === | $)는 다음 배수가 될 때까지 텍스트를 검색합니다. – Vinoth

+0

또 하나의 정규식을 사용하여 "{{Refli = st | 35e = m}}" "에서 텍스트 부분을 얻으 려합니다"== Notes 및 references == {{Refli = st | 35e = m}} ". – Vinoth

+0

@ user2778173 정규 표현식을 사용하지 않았습니까? [demo] (http://regex101.com/r/uD6kL6)를 참조하십시오. 긍정적 인 lookahead'(? = ...)에 대한 설명을 추가했습니다. – Jerry

관련 문제