2016-09-24 6 views
2

정말 간단한 문제를 해결하려고하지만 모든 해결책을 찾을 수 없습니다. 내 문자열은 다음과 같습니다 : "...0.0..0.0..."Regex - 일부 일치하지 않음

내 정규식은 : 0.0, 0..0, 0.0 하지만 그 대신 그의 난 단지 두 경기를 얻고있다 : 0.0 나는 3 경기를 기대하고 0[.]{1,3}0

및 0.0. 당신은 무엇을 말해 줄 수 있습니까

답변

1

문제는 정규 표현식이 처음으로 일치 할 때, 그것이 일치하는 입력 문자열로부터 문자를 소비한다는 것입니다. 그것은 단지, 그래서 다음 다음 경기를 위해 당신이 볼 수 있듯이,이

....0.0... 

하고있는 문자열의 나머지 부분을 고려할 것

...0.0....0.0... 
    ^^^ 

: 그래서 첫 경기에서, 그것과 일치 일치하는 것을 하나 찾는다.

정규식 엔진이 지원하는 경우이 문제를 해결할 수있는 방법 중 하나는 너비가 0 인 미리보기 어설 션을 사용하는 것입니다. 그래서 정규식 이것의 의미는 마지막에 0 일치하지만 그것을 소비하지 것입니다

0[.]{1,3}(?=0) 

과 같을 것이다. 이 접근법의 문제점은 경기에 0이 포함되지 않는다는 것입니다. 이 문제에 대한 한 가지 해결책은 나중에 직접 0을 추가하는 것입니다.

+0

감사합니다. 멋지고 영리한 해결 방법입니다. 내가해야 할 일은 일치 문자열 끝에 "0"을 추가하는 것입니다. 이것이 유일한 해결책이라고 생각하십니까? – patex1987

+0

lookahead 솔루션은 여기에서 가장 단순한 솔루션이라고 생각합니다 (다시 말하면 정규 표현 엔진이이를 지원한다고 가정). – redneb

+1

정규 표현식 엔진이 미리보기를 지원하는 경우 "더 나은"해결책은 ['(? = (0 \. {1,3} 0)'] (https://regex101.com/r/bJ3gK5/1)입니다. 모든 값은 그룹 1에 저장되며 마지막에 '0'을 추가 할 필요가 없습니다.) 그것은 redneb의 패턴보다 조금 느립니다. –

관련 문제