2014-03-19 1 views
3

일련의 3-6 숫자까지 문자열을 추출합니다. 그러나 나는 3 개의 0보다 많은 숫자를 포함하고 싶지 않습니다.숫자가 있지만 연속적인 0이 아닌 음수 lookahead 정규식

제가 지금 가지고있는 것은 일반적인 lookahead입니다. 그러나 어떻게 제로 부분을 구현합니까?

(\d{3,6})[:|\s]{0,2}([a-zA-Z]{3})((?:(?!\d{3,6}).)*) 

예 입력 :

010113 tee Some text for a 1000 reasons 020113 mee More text 

그래서 입력 형식 [3-6 numbers] [3 letter identifier] [message] (반복)에

는 나는 단지 1000 때까지, 020113까지 문자열과 일치해야합니다.

+0

6 자리수 이상의 숫자가 포함 된 문자열의 결과는 어떻게됩니까? 그걸 무시하니? –

+0

그에 따라 편집 됨. – Difusio

+0

그 문자열은 이미 6 자리로 시작합니다. 왜 그 전에 멈추지 않습니까? –

답변

3

할 수 있습니다 둥지 내다 주장 :

((?:(?!(?!\d*000)\d{3,6}).)*) 

설명 :

(   # Match/capture in group 1: 
(?:   # Start of non-capturing group. 
    (?!   # Assert that it's impossible to match... 
    (?!\d*000) # (unless it's a number that contains 000) 
    \d{3,6} # a number of three to six digits here. 
)   # End of lookahead 
    .   # Match any character 
)*   # End of non-capturing group, repeat any number of times 
)    # End of capturing group 1 

live on regex101.com를 참조하십시오.

+0

Brilliant, 자세한 설명과 도움이되는 사이트로 안내해 주셔서 감사합니다. – Difusio

관련 문제