답변:
미리보기 어설 션을 사용할 수 있습니다.
(?!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
findstr
명령을 사용하고 있습니다. 정규식 도구에서 찾을 수있는 기능 중 일부만 제공합니다. lookahead는 그들 사이에 없습니다. (방금 findstr 태그를 직접 추가했습니다 .)
패턴과 일치하고 호스트 언어를 사용하여 일치의 부울 결과를 반전시킵니다. 이것은 훨씬 더 읽기 쉽고 유지 보수가 쉬울 것입니다.
언급되지 않은 간단한 해결책이 있었기 때문에이 고대의 질문을 부활시키는 것은 아닙니다. ( 정규 현상금 퀘스트를 조사하는 동안 질문을 찾았습니다 .)
나는 (A와 ~ B) 패턴과 일치 해야하는 상황에 직면 해 있습니다.
이를위한 기본 정규식은 매우 간단합니다. B|(A)
전체 경기를 무시하고 A가 포함될 그룹 1 캡처를 조사하십시오.
예 (정규식에서 html 파싱에 대한 모든 면책 조항 포함) : A는 숫자, B는 안의 숫자 <a tag
정규식 : <a.*?<\/a>|(\d+)
데모 (오른쪽 아래 창에서 그룹 1을보십시오)
참고
\d
와 함께 [[:digit:]]
. 첫 번째 참고 문헌 은 Perl과 PHP에만 해당한다고 언급합니다. "Perl과 PHP에 고유 한 구문을 사용하는 변형이 있습니다."
정규 언어의 보완은 정규 언어이지만이를 구성 하려면 정규 언어에 대한 DFA 를 작성하고 유효한 상태를 오류로 변경해야합니다. 예를 보려면 이것을 참조하십시오 . 어떤 페이지가 말을하지 않는 것은 변환이다 /(ac|bd)/
에 /(a[^c]?|b[^d]?|[^ab])/
. DFA에서 정규 표현식으로 다시 변환하는 것은 쉽지 않습니다. 이전에 제안한 것처럼 정규식을 변경하지 않고 코드의 의미를 변경할 수 있으면 더 쉽습니다.
replace
str.replace(/re/g, '')
으로을 사용하고 있으므로 다시 가입 할 필요가 없습니다. 또한 당신이 좋은 후행 \ s에 던져? str.replace(/\re\s?/g, '')
다음 과 같이 당신은 문자열의 중간에 대체되는 무언가로부터 당신이 가진 중복 공간을 제거합니다
내 대답은 여기에서도 문제를 해결할 수 있습니다.
https://stackoverflow.com/a/27967674/543814
$1
을 읽을 것 $2
입니다.$2
은 캡쳐하지 않고 만들어 졌으므로 피할 수 있습니다.예:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
첫 번째 캡처 그룹은 피할 패턴을 지정합니다. 마지막 캡처 그룹은 다른 모든 것을 캡처합니다. 간단히 그 그룹을 읽으십시오 $2
.
findstr
여기에있는 모든 답변이 태그에 유효하지 않기 때문에 태그를 제거했습니다 .