IT박스

특정 문자열 상수를 제외하는 RegEx

itboxs 2020. 7. 29. 07:57
반응형

특정 문자열 상수를 제외하는 RegEx


이 질문에는 이미 답변이 있습니다.

정규 표현식을 사용하여 특정 문자열 상수를 제외한 모든 문자열을 일치시킬 수 있습니까? "ABC"라고 말합니까? 하나의 특정 문자열 상수 만 제외 할 수 있습니까? 미리 도와 주셔서 감사합니다.


네거티브 미리보기 어설 션을 사용해야합니다.

(?!^ABC$)

예를 들어 다음을 사용할 수 있습니다.

(?!^ABC$)(^.*$)

이것이 편집기에서 작동하지 않으면 시도하십시오. 루비와 자바 스크립트에서 작동하도록 테스트되었습니다.

^((?!ABC).)*$

.NET에서는 그룹화를 다음과 같은 이점으로 사용할 수 있습니다.

http://regexhero.net/tester/?id=65b32601-2326-4ece-912b-6dcefd883f31

당신은 그것을 알 수 있습니다 :

(ABC)|(.)

두 번째 그룹에서 ABC를 제외한 모든 것을 가져옵니다. 괄호는 각 그룹을 둘러 쌉니다. 따라서 (ABC)는 그룹 1이고 (.)는 그룹 2입니다.

따라서 다음과 같이 두 번째 그룹을 교체하십시오.

$2

또는 .NET에서 Regex 클래스 내부의 Groups 컬렉션을 살펴보면 약간의 제어가 가능합니다.

대부분의 다른 정규식 구현에서도 비슷한 작업을 수행 할 수 있어야합니다.

업데이트 : 나는 이것을하는 훨씬 빠른 방법을 찾았습니다 : http://regexhero.net/tester/?id=997ce4a2-878c-41f2-9d28-34e0c5080e03

여전히 그룹화를 사용합니다 (그룹화를 사용하지 않는 방법을 찾을 수 없음). 그러나이 방법은 첫 번째 방법보다 10 배 이상 빠릅니다.


부정적인 예견이나 다음과 같은 것을 사용할 수 있습니다.

^([^A]|A([^B]|B([^C]|$)|$)|$).*$

어쩌면 조금 단순화 될 수 있습니다.


정규 표현식 엔진이 특별한 지원을하지 않는 한 쉽지 않습니다. 가장 쉬운 방법은 부정 일치 옵션을 사용하는 것입니다. 예를 들면 다음과 같습니다.

$var !~ /^foo$/
    or die "too much foo";

그렇지 않다면 악한 일을해야합니다.

$var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/
    or die "too much foo";

그 말은 기본적으로 "비-로 시작 f하면 나머지는 무엇이든 될 수 있고 f, 비-로 시작 o하면 나머지는 무엇이든 될 수 있습니다. 그렇지 않으면 시작 fo하면 다음 문자는 다른 것이 아닙니다 o."


이 정규 표현식을 사용해보십시오.

^(.{0,2}|([^A]..|A[^B].|AB[^C])|.{4,})$

세 가지 경우를 설명합니다.

  1. 임의의 3 자 미만
  2. 정확히 3 자,
    • 첫 번째가 아니 A거나
    • 첫 번째는 A이지만 두 번째는 그렇지 B않거나
    • 첫 번째는 A두 번째 B이지만 세 번째는 그렇지 않습니다C
  3. 3 개 이상의 임의의 문자

참고 URL : https://stackoverflow.com/questions/1395177/regex-to-exclude-a-specific-string-constant

반응형