문제
"boon.ini" 및 "http"와 같은 단어가 나타나면 실패하는 표현식을 원합니다.목표는 이 표현식을 사용하여 모든 키워드 세트에 대해 구성할 수 있는 것입니다.
해결책
^(?:(?!boon\.ini|http).)*$\r?\n?
(에서 가져옴 RegexBuddy의 라이브러리)은 boon.ini 및/또는 http를 포함하지 않는 모든 행과 일치합니다.그게 당신이 원한 건가요?
다른 팁
사용할 수 있는 대체 표현:
^(?!.*IgnoreMe).*$
^
= 줄의 시작을 나타냅니다.
$
=는 줄의 끝을 나타냅니다.
(?! Expression)
=는 너비가 0임을 나타냅니다. 사전 예측 표현식에서 부정 일치를 나타냅니다.
그만큼 ^
그렇지 않으면 평가할 때 부정적인 시선이 'IgnoreMe' 텍스트 내부/밖 어딘가에서 시작될 수 있으며 원하지 않는 곳에서도 일치하게 됩니다.
예를 들어정규식을 사용하는 경우:
(?!.*IgnoreMe).*$
"Hello IgnoreMe Please"를 입력하면 다음과 같은 결과가 나타납니다."gnoreMe Please"는 부정적 전망으로 'I' 뒤에 완전한 문자열 'IgnoreMe'가 없음을 찾습니다.
표현식 내에서 결과를 부정하는 대신 코드에서 이를 수행해야 합니다.그러면 표현이 꽤 단순해집니다.
\b(boon\.ini|http)\b
돌아올 것이다 true
boon.ini 또는 http가 문자열의 아무 곳에나 있는 경우.httpd 또는 httpxyzzy와 같은 단어는 일치하지 않습니다. \b
, 또는 단어 경계.원하는 경우 해당 항목을 제거하면 해당 항목도 일치합니다.더 많은 키워드를 추가하려면 파이프를 더 추가하면 됩니다.
\b(boon\.ini|http|foo|bar)\b
정규식을 작성하면 도움이 될 것입니다. 성공하다 찾고 있는 단어를 발견하면 조건을 반전시킵니다.
예를 들어, Perl에서는 다음을 사용합니다:
if (!/boon\.ini|http/) {
# the string passed!
}
^[^£]*$
위의 표현식은 문자열에서 파운드 기호만 제한합니다.문자열을 제외한 모든 문자를 허용합니다.
어떤 언어/정규 표현식 라이브러리?ASP.NET에 관한 질문인 줄 알았는데, 이 경우 이 문서의 "부정적인 룩헤드" 섹션을 볼 수 있습니다.http://msdn.microsoft.com/en-us/library/ms972966.aspx
엄밀히 말하면 정규식의 부정은 여전히 정규 언어를 정의하지만 이를 표현할 수 있는 라이브러리/언어/도구는 거의 없습니다.
부정적인 검색은 동일한 기능을 제공할 수 있지만 실제 구문은 사용 중인 항목에 따라 다릅니다.Tim의 대답은 다음과 같은 예입니다. (?...)
Google Analytics 프로필 필터의 비프로덕션 하위 도메인 URL을 제외하기 위해 이것을 사용했습니다(Tim Pietzcker 답변 기반).
^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$
여기에서 컨텍스트를 볼 수 있습니다. 여러 단어를 제외하는 정규식