[regex] 지정된 문자열을 제외한 모든 항목과 일치
다음 정규식이 “red”, “green”또는 “blue”와 일치한다는 것을 알고 있습니다.
red|green|blue
지정된 여러 문자열을 제외한 모든 항목과 일치하도록 만드는 간단한 방법이 있습니까?
답변
문자열이 빨강, 녹색 또는 파랑이 아닌지 확인하려면 caskey의 대답은 그것입니다. 그러나 종종 원하는 것은 선의 어디에도 빨강, 녹색 또는 파랑이 포함되어 있지 않은지 확인하는 것입니다. 이를 위해 정규 표현식을 다음 ^
과 같이 고정 .*
하고 부정적인 예측에 포함합니다.
^(?!.*(red|green|blue))
또한 “engine”이라는 단어는 포함하지만 해당 색상은 포함하지 않는 행을 원한다고 가정하십시오.
^(?!.*(red|green|blue)).*engine
.*
정규식의 머리에를 인수 할 수 있다고 생각할 수 있습니다 .
^.*(?!red|green|blue)engine # Does not work
하지만 당신은 할 수 없습니다. .*
작동하려면 두 인스턴스가 모두 있어야합니다 .
답변
언어에 따라 다르지만 일반적으로 다음과 같이 넣을 수있는 부정적인 주장이 있습니다.
(?!red|green|blue)
(구문 수정 덕분에 위의 내용은 유효한 Java 및 Perl, YMMV입니다)
답변
주어진 문자열을 제외한 모든 항목 일치
특정 문자열을 제외한 모든 항목을 일치시키려는 전체 문자열을 일치 시키려면 다음과 같이 할 수 있습니다.
^(?!(red|green|blue)$).*$
즉, 빨강, 녹색 또는 파랑으로 시작하고 끝날 수없는 문자열의 시작 부분에서 일치를 시작하고 다른 항목은 문자열의 끝까지 일치시킵니다.
여기에서 시도 할 수 있습니다 : https://regex101.com/r/rMbYHz/2
이것은 부정적 예측 을 지원하는 정규식 엔진에서만 작동합니다 .
답변
부정적인 예견이 필요하지 않습니다. 작동하는 예가 있습니다.
/([\s\S]*?)(red|green|blue|)/g
기술:
[\s\S]
-모든 문자와 일치*
-이전 그룹에서 0에서 무제한까지 일치?
-가능한 한 적게 일치(red|green|blue|)
-이 단어 중 하나 또는 아무것도 일치하지 않음g
-반복 패턴
예:
whiteredwhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredwhiteredgreenbluewhiteredwhiteredwhiteredwhiteredwhiteredredgreenredgreenredgreenredgreenredgreenbluewhiteredbluewhiteredbluewhiteredbluewhiteredbluewhiteredwhite
될거야:
whitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhitewhite
테스트 : regex101.com
답변
나는 같은 질문이 있었고 제안 된 솔루션은 거의 작동했지만 문제가있었습니다. 결국 내가 사용한 정규식은 다음과 같습니다.
^(?!red|green|blue).*
Javascript와 .NET에서 테스트했습니다.
. *는 ^ (?!. * red | green | blue)와 같이 부정적인 예견 안에 배치되어서는 안됩니다. 그렇지 않으면 첫 번째 요소가 나머지 요소와 다르게 동작하게됩니다 (예 : “anotherred”는 “일치하는 동안 일치하지 않습니다.” 또 다른 녹색 “것입니다)
답변
모든 텍스트와 일치하지만 패턴과 일치하는 텍스트는 일반적으로 정규식 패턴으로 문자열을 분할 하여 수행됩니다. .
예 :
- 씨#–
Regex.Split(text, @"red|green|blue")
또는 빈 값을 제거하려면Regex.Split(text, @"red|green|blue").Where(x => !string.IsNullOrEmpty(x))
( 데모 참조 ) - vb.net–
Regex.Split(text, "red|green|blue")
또는 빈 항목을 제거하려면Regex.Split(text, "red|green|blue").Where(Function(s) Not String.IsNullOrWhitespace(s))
( demo 또는 LINQ가 지원되는 이 데모 참조 ) - 자바 스크립트–
text.split(/red|green|blue/)
(g
여기에 수정자를 사용할 필요가 없습니다 !) (빈 값을 제거하려면을 사용text.split(/red|green|blue/).filter(Boolean)
하십시오), 데모를 참조하십시오. - 자바–
text.split("red|green|blue")
또는-모든 후행 빈 항목을 유지하려면-을 사용text.split("red|green|blue", -1)
하거나 모든 빈 항목 을 제거 하려면 더 많은 코드를 사용 하여 제거합니다 ( 데모 참조 ). - 그루비-Java와 유사하게
text.split(/red|green|blue/)
모든 후행 항목 사용을 가져text.split(/red|green|blue/, -1)
오고 모든 빈 항목 사용을 제거합니다text.split(/red|green|blue/).findAll {it != ""})
( 데모 참조 ). - Kotlin–
text.split(Regex("red|green|blue"))
또는 빈 항목을 제거하려면을 사용text.split(Regex("red|green|blue")).filter{ !it.isBlank() }
하고 데모를 참조하십시오. - 스칼라–
text.split("red|green|blue")
또는 모든 후행 빈 항목을 유지하려면text.split("red|green|blue", -1)
및을 사용 하여 모든 빈 항목을 제거하려면text.split("red|green|blue").filter(_.nonEmpty)
( 데모 참조 ) - 루비–
text.split(/red|green|blue/)
, 빈 값을 제거하려면.split(/red|green|blue/).reject(&:empty?)
(그리고 선행 및 후행 빈 항목을 모두 가져 오려면 두-1
번째 인수로 사용.split(/red|green|blue/, -1)
하십시오.) ( 데모 참조 ) - 펄–
my @result1 = split /red|green|blue/, $text;
또는 모든 후행 빈 항목이my @result2 = split /red|green|blue/, $text, -1;
있거나 비어있는 항목이없는 경우my @result3 = grep { /\S/ } split /red|green|blue/, $text;
( 데모 참조 ) - PHP–
preg_split('~red|green|blue~', $text)
또는preg_split('~red|green|blue~', $text, -1, PREG_SPLIT_NO_EMPTY)
빈 항목을 출력하지 않으려면 ( 데모 참조 ) - 파이썬–
re.split(r'red|green|blue', text)
또는 빈 항목을 제거하려면list(filter(None, re.split(r'red|green|blue', text)))
( 데모 참조 ) - 가다-를 사용
regexp.MustCompile("red|green|blue").Split(text, -1)
하고 빈 항목을 제거해야하는 경우이 코드를 사용 합니다 . Go 데모를 참조하십시오 .
참고 : 패턴에 캡처 그룹이 포함 된 경우 정규식 분할 함수 / 방법 은 추가 옵션에 따라 다르게 작동 할 수 있습니다. 그런 다음 적절한 분할 방법 문서를 참조하십시오.
답변
“빨간색”이라는 단어를 제외한 모든
var href = '(text-1) (red) (text-3) (text-4) (text-5)';
var test = href.replace(/\((\b(?!red\b)[\s\S]*?)\)/g, testF);
function testF(match, p1, p2, offset, str_full) {
p1 = "-"+p1+"-";
return p1;
}
console.log(test);
“빨간색”이라는 단어를 제외한 모든
var href = '(text-1) (frede) (text-3) (text-4) (text-5)';
var test = href.replace(/\(([\s\S]*?)\)/g, testF);
function testF(match, p1, p2, offset, str_full) {
p1 = p1.replace(/red/g, '');
p1 = "-"+p1+"-";
return p1;
}
console.log(test);