[regex] 이 문자와 일치하지 않음을 의미하는 정규 표현식 연산자는 무엇입니까?

*, ?, +문자는 모두이 문자와 일치 함을 의미합니다. 어떤 문자가 이것과 일치하지 않음을 의미합니까? 예가 도움이 될 것입니다.



답변

부정 문자 클래스를 사용하여 특정 문자를 제외 할 수 있습니다. 예를 들어 [^abcde]a, b, c, d, e 문자 를 제외한 모든 문자 와 일치합니다.

모든 문자를 문자 그대로 지정하는 대신 문자 클래스 내에서 속기 를 사용할 수 있습니다 . [\w](소문자)는 모든 “단어 문자”(문자, 숫자 및 밑줄) [\W]와 일치 하고 (대문자)는 단어 문자 이외의 항목과 일치합니다. 마찬가지로 [\d]0-9 숫자와 일치하는 반면 0-9 숫자 [\D]이외의 숫자와 일치하는 식입니다.

PHP를 사용하는 경우 정규식 문자 클래스 문서를 살펴볼 수 있습니다 .


답변

“일치하지 않음”이라고 말하는 방법에는 두 가지가 있습니다. 문자 범위와 너비가 0 인 부정 예견 / 예측입니다.

전자는 : 일치하지 않는 a, b, c또는 0:[^a-c0]

후자 : foobar다음을 제외한 모든 세 글자 문자열과 일치합니다 .

(?!foo|bar).{3}

또는

.{3}(?<!foo|bar)

또한, 당신을위한 수정 : *, ?그리고 +실제로 아무것도 일치하지 않습니다. 반복 연산자이며 항상 일치하는 연산자를 따릅니다. 따라서, a+수단 중 하나 이상을 일치 a, [a-c0]+수단은 하나와 일치 이상 a, b, c또는 0, 동안 [^a-c0]+하나와 일치 것 이상의 아무것도 아니라고 a, b, c또는 0.


답변

[^] (내 [] )는 정규 표현식의 부정이지만 ^“문자열의 시작”입니다.

[^a-z]“a”에서 “z”까지 가 아닌 단일 문자와 일치

^[a-z] 문자열이 “a”에서 “z”로 시작 함을 의미합니다.

참고


답변

^ 문자 범위의 시작 또는 부정적인 예견 / 예상 비하인드 어설 션에 사용됩니다.

>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>


답변