REGEX- 특정 패턴을 제외한 모든 것을 일치시키는 방법
문제
특정 패턴을 충족하지 않는 문자열과 일치하도록 Regex를 어떻게 작성합니까? 나는 (a와 ~ b) 패턴과 일치 해야하는 상황에 직면하고 있습니다.
해결책
외관 어설 션을 사용할 수 있습니다.
(?!999)\d{3}
이 예제는 다른 세 자리와 일치합니다 999
.
그러나이 기능으로 정기적 인 표현식 구현이 없으면 정규 발현 풍미의 비교), 당신은 아마도 자신의 기본 기능으로 정기적 인 표현을 구축해야 할 것입니다.
기본 구문만의 호환 가능한 정규 표현식은 다음과 같습니다.
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
이것은 또한 그렇지 않은 세 자리 시퀀스와 일치합니다. 999
.
다른 팁
문자열에서 단어 A를 일치시키고 단어 B와 일치하지 않으려는 경우 : 예 : 텍스트가있는 경우 :
1. I have a two pets - dog and a cat
2. I have a pet - dog
텍스트 줄을 검색하고 싶다면 개가 있습니다 애완 동물과 고양이가 없습니다 이 정규식을 사용할 수 있습니다.
^(?=.*?\bdog\b)((?!cat).)*$
두 번째 줄만 찾을 수 있습니다.
2. I have a pet - dog
패턴과 일치하고 호스트 언어를 사용하여 경기의 부울 결과를 뒤집습니다. 이것은 훨씬 더 읽기 쉽고 관리하기 쉽습니다.
이 고대 질문은 언급되지 않은 간단한 해결책이 있었기 때문에이 고대 질문을 부활시키지 않았습니다. (에 대한 연구를하는 동안 질문을 찾았습니다. Regex Bounty Quest.)
나는 (a와 ~ b) 패턴과 일치 해야하는 상황에 직면하고 있습니다.
이것에 대한 기본 정규식은 무섭게 간단합니다. B|(A)
전체 경기를 무시하고 A가 포함 된 Group 1 캡처를 검사합니다.
예제 (REGEX에서 HTML을 구문 분석하는 것에 대한 모든 면책 조항과 함께) : a는 숫자, b는 내부의 숫자입니다. <a tag
동정인 : <a.*?<\/a>|(\d+)
데모 (오른쪽 하단 창에서 그룹 1을보십시오)
참조
여기서 내 대답은 귀하의 문제를 해결할 수 있습니다.
https://stackoverflow.com/a/27967674/543814
- 교체 대신 매치를 사용합니다.
- 그룹 대신
$1
, 당신은 그룹을 읽을 것입니다$2
. - 그룹
$2
그곳에서 캡처하지 않았으며 피할 것입니다.
예시:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
첫 번째 캡처 그룹은 피하고 싶은 패턴을 지정합니다. 마지막 캡처 그룹은 다른 모든 것을 캡처합니다. 그 그룹을 단순히 읽고 $2
.
(B)|(A)
그런 다음 그룹 2 캡처를 사용하십시오 ...