특정 패턴으로 시작하는 문자열을 제외 하고 모든 것을 일치시킬 수있는 정규식이 필요합니다 (특히 index.php
다음과 같은 것 index.php?id=2342343
)
특정 패턴으로 시작하는 문자열을 제외 하고 모든 것을 일치시킬 수있는 정규식이 필요합니다 (특히 index.php
다음과 같은 것 index.php?id=2342343
)
답변:
정규 표현식 전문가는 아니지만 처음부터 부정적인 예측을 사용할 수 있다고 생각합니다. 예를 들어로 ^(?!foo).*$
시작하는 것과 일치해서는 안됩니다 foo
.
^((?!foo).)*$
( stackoverflow.com/a/406408/3964381 )
정규식 : 모든 것을 제외하고 :
foo
) :
world.
말) :
foo
) (POSIX 호환 patern 없음, 죄송합니다) :
|
: 기호가 있는 문자열과 일치하지 않아야 함 ) :
foo
)
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이 일치하면 필요하지 않습니다. 그렇지 않으면 비어 있지 않으면 일치 값을 가져옵니다.데모 참고 사항 : 줄 바꿈 \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\./
.
^(?!foo$)
경우 표현식이 작동하려면 달러 기호가 괄호 안에 있어야하는 이유는 무엇입니까? 나는 ^(?!foo)$
같은 결과를 줄 것으로 기대 했지만 그렇지 않았습니다.
$
앵커가 lookahead 내부에 있을 때 , 이는 조건의 일부이며 너비 가 0 인 어설 션의 일부입니다 . 에서와 같이 외부에있는 경우 문자열 시작 직후 문자열 끝을 필요로 ^(?!foo)$
하는 소비 패턴의 일부 이므로 항상 true를 반환하므로 음수 예측이 관련 이 없습니다 (문자열 끝 이후에는 텍스트가있을 수 없음) 혼자하자 foo
). 따라서, ^(?!foo$)
뒤에 오는 문자열의 시작 부분과 일치 foo
하는 문자열의 끝 부분이 일치합니다. ^(?!foo)$
빈 문자열과 일치합니다.
cot
또는 사이의 하위 문자열을 찾아서 다음 lan
과 같이 일치 항목을 제거해야합니다 regex.replace(myString, "^.*?(?:cot|lan)\s*", "")
.
^
문자 세트의 시작 부분에 해당 문자 이외의 문자와 일치하도록 a 를 넣을 수 있습니다 .
[^=]*
모든 것을 일치 시키지만 =
내가 할 정규식 할 필요가 모든 것을 일치 하지만 제외시켰다 로 시작하는 문자열을
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);