정규식 질문 - 같지 않을 때 문자열 일치

정규식 질문 - 같지 않을 때 문자열 일치

내 정규 표현식:

^[0-9]{9}_(010020)(004)-[0-9,a-z,A-Z]+__[0-9]{8}_[0-9]{4}

다음 문자열과 일치합니다.

010020004_010020004-xxxxxxxxxxxxxxxxxx_20180105_1606

위의 방법은 괜찮습니다. 하지만 (004) 굵은 문자열과 같지 않은 문자열을 일치시키려는 경우입니다. 부정 예측(?!004)을 시도했는데 문자열과 일치하지 않았습니다.

^[0-9]{9}_(010020)**(?!004)**-[0-9,a-z,A-Z]+__[0-9]{8}_[0-9]{4}

010020004_010020005-xxxxxxxxxxxxxxxxxx_20180105_1606

내가 뭐 놓친 거 없니

답변1

귀하의 패턴과 답변을 바탕으로https://stackoverflow.com/questions/1971738/regex-for-all-strings-not-changing-a-string:내 편집기에서는 다음 패턴이 작동합니다. ^[0-9]{9}_(010020).*(?<!004)-[0-9,a-z,A-Z]+_[0-9]{8}_[0-9]{4}

귀하의 패턴에 "+" 기호 뒤에 추가 밑줄이 있는 것 같습니다. 먼저 마지막 3자를 일치시킨 다음 "004"가 아닌지 확인해야 합니다.

정확한 형식에 따라 3자리 숫자만 일치하는지 확인할 수 있습니다.^[0-9]{9}_(010020)([0-9]*(?<!004)){3}-[0-9,a-z,A-Z]+_[0-9]{8}_[0-9]{4}

관련 정보