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


89

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


일치하지 않는 단어와 관련된 솔루션은 여기를 참조하십시오. stackoverflow.com/questions/406230
null

답변:


88

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

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

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


80

"일치하지 않음"이라고 말하는 방법에는 두 가지가 있습니다. 문자 범위와 너비가 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.



48

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

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

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

참고


8

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

>>> 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>

당신은 사용해야합니까 ?!지난 2 예에서 아니면 그냥 사용할 수있는 !자체? 무엇을 않는 ?존재합니까?
Upvote 클릭

파이썬 ?은 그것이 확장임을 알리기 위해 필요합니다 . 다른 정규식 엔진에는 자체 규칙이있을 수 있습니다.
Ignacio Vazquez-Abrams

@Click : 꽤 표준입니다. regular-expressions.info/refadv.html , 대부분의 regexp 엔진 매뉴얼도 같은 말을합니다.
Amadan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.