[regex] 정규식 : 특정 패턴을 제외한 모든 패턴과 일치

특정 패턴으로 시작하는 문자열을 제외 하고 모든 것을 일치시킬 수있는 정규식이 필요합니다 (특히 index.php다음과 같은 것 index.php?id=2342343)



답변

정규 표현식 전문가는 아니지만 처음부터 부정적인 예측을 사용할 수 있다고 생각합니다. 예를 들어로 ^(?!foo).*$시작하는 것과 일치해서는 안됩니다 foo.


답변

정규식 : 모든 것을 제외하고 :

데모 참고 사항 : 줄 바꿈 \n은 데모의 부정 문자 클래스 내부에서 사용되어 인접한 줄과의 일치 오버플로를 피합니다. 개별 문자열을 테스트 할 때는 필요하지 않습니다.

앵커 참고 : 많은 언어에서 \A문자열의 명확한 시작 을 정의하는 데 사용하고 문자열의 끝을 정의하려면 \zPython \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')