[regex] 정규식 : 특정 패턴을 제외한 모든 패턴과 일치
특정 패턴으로 시작하는 문자열을 제외 하고 모든 것을 일치시킬 수있는 정규식이 필요합니다 (특히 index.php
다음과 같은 것 index.php?id=2342343
)
답변
정규 표현식 전문가는 아니지만 처음부터 부정적인 예측을 사용할 수 있다고 생각합니다. 예를 들어로 ^(?!foo).*$
시작하는 것과 일치해서는 안됩니다 foo
.
답변
정규식 : 모든 것을 제외하고 :
- 특정 패턴으로 시작 하는 문자열 (예 : 비어 있거나 너무 시작하지 않는 문자열
foo
) :- NFA를위한 Lookahead 기반 솔루션 :
- 둘러보기를 지원하지 않는 정규식 엔진에 대한 부정 문자 클래스 기반 솔루션 :
- 문자열 로 끝나는 특정 패턴 (아무 말하지
world.
말) : - 특정 텍스트를 포함 하는 문자열 (예 :를 가진 문자열과 일치하지 않음
foo
) (POSIX 호환 patern 없음, 죄송합니다) : - 특정 문자를 포함 하는 문자열 (예
|
: 기호가 있는 문자열과 일치하지 않아야 함 ) : - 문자열은 동일 일부 문자열 (예를 들어,하지에 동일
foo
)- 둘러보기 기반 :
- POSIX :
- 문자의 순서 :
- PCRE (모든 텍스트와 일치하지만
cat
) :/cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
또는/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
- 다음과 같은 둘러보기를 허용하는 다른 엔진 :
(cat)|[^c]*(?:c(?!at)[^c]*)*
(또는(?s)(cat)|(?:(?!cat).)*
, 또는(cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
) 언어 의미를 확인하십시오. 그룹 1이 일치하면 필요하지 않습니다. 그렇지 않으면 비어 있지 않으면 일치 값을 가져옵니다.
- PCRE (모든 텍스트와 일치하지만
- 특정 단일 문자 또는 문자 집합 :
데모 참고 사항 : 줄 바꿈 \n
은 데모의 부정 문자 클래스 내부에서 사용되어 인접한 줄과의 일치 오버플로를 피합니다. 개별 문자열을 테스트 할 때는 필요하지 않습니다.
앵커 참고 : 많은 언어에서 \A
문자열의 명확한 시작 을 정의하는 데 사용하고 문자열의 끝을 정의하려면 \z
Python \Z
에서 JavaScript에서는 $
괜찮습니다.
점 참고 : POSIX, TRE, TCL이 아닌 많은 맛 에서 개행 문자를 제외한.
모든 문자와 일치합니다 . 개행을 포함한 모든 문자와 일치 시키 려면 해당 DOTALL 수정 자 ( PCRE / Boost / .NET / Python / Java 및 Ruby)를 사용해야합니다 ./s
/m
.
백 슬래시 참고 : 이스케이프 시퀀스를 허용하는 C 문자열로 패턴을 선언해야하는 언어 (예 \n
: 줄 바꿈 과 같은 )에서는 엔진이 리터럴 문자 (예 : Java)로 처리 할 수 있도록 특수 문자를 이스케이프 처리하는 백 슬래시를 두 배로 늘려야 world\.
합니다. 로 선언 "world\\."
하거나 문자 클래스를 사용하십시오 🙂 "world[.]"
. 원시 문자열 리터럴 (Python r'\bworld\b'
), C # @"world\."
완전 문자열 리터럴 또는 슬래시 문자열 / 정규 리터럴 표기법을 사용하십시오 /world\./
.
답변
^
문자 세트의 시작 부분에 해당 문자 이외의 문자와 일치하도록 a 를 넣을 수 있습니다 .
[^=]*
모든 것을 일치 시키지만 =
답변
그냥 일치 /^index\.php/
다음과 일치하는 어떤 거부합니다.
답변
파이썬에서 :
>>> import re
>>> p='^(?!index\.php\?[0-9]+).*$'
>>> s1='index.php?12345'
>>> re.match(p,s1)
>>> s2='index.html?12345'
>>> re.match(p,s2)
<_sre.SRE_Match object at 0xb7d65fa8>
답변
내가 할 정규식 할 필요가 모든 것을 일치 하지만 제외시켰다 로 시작하는 문자열을
index.php
특정 패턴 (특히 index.php를 다음과 무엇의 index.php 같은? ID = 2342343)
사용 방법 Exec
let match,
arr = [],
myRe = /([\s\S]+?)(?:index\.php\?id.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
var myRe = /([\s\S]+?)(?:index\.php\?id=.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
var matches_array = myRe.exec(str);
console.log(matches_array[1]);
또는 다른 경기
let match,
arr = [],
myRe = /index.php\?id=((?:(?!index)[\s\S])*)/g;
var str = 'http://regular-viragenia/index.php?id=2342343index.php?id=111index.php?id=222';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
답변
정규식을 사용하지 않는 것은 어떻습니까?
// In PHP
0 !== strpos($string, 'index.php')