문제

특정 패턴을 충족하지 않는 문자열과 일치하도록 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을보십시오)

참조

상황을 제외하고 패턴을 일치시키는 방법 S1, S2, S3

패턴을 일치시키는 방법이 아니라면 ...

일반 언어의 보완은 또한 일반 언어이지만이를 구성하려면 DFA 일반 언어의 경우, 유효한 상태 변경을 오류로 변경하십시오. 보다 이것 예를 들어. 페이지가 말하지 않는 것은 변환된다는 것입니다 /(ac|bd)/ ~ 안으로 /(a[^c]?|b[^d]?|[^ab])/. DFA에서 정규 표현으로 전환하는 것은 사소한 것이 아닙니다. 정규 표현식을 변경하지 않고 이전에 제안한 것처럼 코드의 의미를 변경할 수 있다면 더 쉽습니다.

패턴 - re

str.split(/re/g) 

패턴을 제외한 모든 것을 반환합니다.

테스트 여기

여기서 내 대답은 귀하의 문제를 해결할 수 있습니다.

https://stackoverflow.com/a/27967674/543814

  • 교체 대신 매치를 사용합니다.
  • 그룹 대신 $1, 당신은 그룹을 읽을 것입니다 $2.
  • 그룹 $2 그곳에서 캡처하지 않았으며 피할 것입니다.

예시:

Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");

첫 번째 캡처 그룹은 피하고 싶은 패턴을 지정합니다. 마지막 캡처 그룹은 다른 모든 것을 캡처합니다. 그 그룹을 단순히 읽고 $2.

(B)|(A)

그런 다음 그룹 2 캡처를 사용하십시오 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top