[regex] 이 문자와 일치하지 않음을 의미하는 정규 표현식 연산자는 무엇입니까?
*, ?, +
문자는 모두이 문자와 일치 함을 의미합니다. 어떤 문자가 이것과 일치하지 않음을 의미합니까? 예가 도움이 될 것입니다.
답변
부정 문자 클래스를 사용하여 특정 문자를 제외 할 수 있습니다. 예를 들어 [^abcde]
a, b, c, d, e 문자 를 제외한 모든 문자 와 일치합니다.
모든 문자를 문자 그대로 지정하는 대신 문자 클래스 내에서 속기 를 사용할 수 있습니다 . [\w]
(소문자)는 모든 “단어 문자”(문자, 숫자 및 밑줄) [\W]
와 일치 하고 (대문자)는 단어 문자 이외의 항목과 일치합니다. 마찬가지로 [\d]
0-9 숫자와 일치하는 반면 0-9 숫자 [\D]
이외의 숫자와 일치하는 식입니다.
PHP를 사용하는 경우 정규식 문자 클래스 문서를 살펴볼 수 있습니다 .
답변
“일치하지 않음”이라고 말하는 방법에는 두 가지가 있습니다. 문자 범위와 너비가 0 인 부정 예견 / 예측입니다.
전자는 : 일치하지 않는 a
, b
, c
또는 0
:[^a-c0]
후자 : foo
및 bar
다음을 제외한 모든 세 글자 문자열과 일치합니다 .
(?!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>