다음 정규식이 "red", "green"또는 "blue"와 일치한다는 것을 알고 있습니다.
red|green|blue
지정된 여러 문자열을 제외한 모든 항목과 일치하도록 만드는 간단한 방법이 있습니까?
if (!s.match(/red|green|blue/)) ...
참고 : OP가 어떤 언어 / 프레임 워크를 지정하지 않는다는 것을 알고 있습니다. 앞의 내용은 규범적인 예가 아니라 일반적인 예로 간주되어야합니다.
다음 정규식이 "red", "green"또는 "blue"와 일치한다는 것을 알고 있습니다.
red|green|blue
지정된 여러 문자열을 제외한 모든 항목과 일치하도록 만드는 간단한 방법이 있습니까?
if (!s.match(/red|green|blue/)) ...
참고 : OP가 어떤 언어 / 프레임 워크를 지정하지 않는다는 것을 알고 있습니다. 앞의 내용은 규범적인 예가 아니라 일반적인 예로 간주되어야합니다.
답변:
문자열이 빨강, 녹색 또는 파랑이 아닌지 확인하려면 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
모든 텍스트와 일치하지만 패턴과 일치하는 텍스트는 일반적으로 정규식 패턴으로 문자열을 분할 하여 수행됩니다. .
예 :
Regex.Split(text, @"red|green|blue")
또는 빈 값을 제거하려면 Regex.Split(text, @"red|green|blue").Where(x => !string.IsNullOrEmpty(x))
( 데모 참조 )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)
하거나 모든 빈 항목 을 제거 하려면 더 많은 코드를 사용 하여 제거합니다 ( 데모 참조 ).text.split(/red|green|blue/)
모든 후행 항목 사용을 가져 text.split(/red|green|blue/, -1)
오고 모든 빈 항목 사용을 제거합니다 text.split(/red|green|blue/).findAll {it != ""})
( 데모 참조 ).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;
( 데모 참조 )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);