Potrzebuję wyrażenia regularnego zdolnego do dopasowania wszystkiego oprócz łańcucha rozpoczynającego się od określonego wzorca (konkretnie index.phpi tego, co następuje, jak index.php?id=2342343)
Potrzebuję wyrażenia regularnego zdolnego do dopasowania wszystkiego oprócz łańcucha rozpoczynającego się od określonego wzorca (konkretnie index.phpi tego, co następuje, jak index.php?id=2342343)
Odpowiedzi:
Nie jestem ekspertem od wyrażeń regularnych, ale myślę, że od samego początku możesz użyć negatywnego spojrzenia, np. ^(?!foo).*$Nie powinieneś pasować do niczego, zaczynając od foo.
^((?!foo).)*$( stackoverflow.com/a/406408/3964381 )
Regex: dopasuj wszystko oprócz :
foo):
world.na końcu):
foo) (brak patern zgodnych z POSIX, przepraszam):
|symbol):
foo):
cat): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/ilub/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is(cat)|[^c]*(?:c(?!at)[^c]*)*(lub (?s)(cat)|(?:(?!cat).)*, lub (cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*), a następnie sprawdzanie językowe oznacza: jeśli grupa 1 jest dopasowana, nie jest nam potrzebna, w przeciwnym razie, pobierz wartość dopasowania, jeśli nie jest pusta[^a-z]+(dowolny znak inny niż mała litera ASCII)|:[^|]+Uwaga demonstracyjna : nowa linia \njest używana w negowanych klasach znaków w demonstracjach, aby uniknąć przepełnienia dopasowania do sąsiednich linii. Nie są one konieczne podczas testowania pojedynczych ciągów.
Uwaga kotwicy : W wielu językach użyj \Ado zdefiniowania jednoznacznego początku łańcucha, a \z(w Pythonie jest to \Zw JavaScript $jest OK), aby zdefiniować sam koniec łańcucha.
Uwaga dot : W wielu smakach (ale nie POSIX, TRE, TCL), .pasuje do dowolnego znaku, ale znak nowego wiersza . Upewnij się, że używasz odpowiedniego modyfikatora DOTALL ( /sw PCRE / Boost / .NET / Python / Java i /mRuby), .aby dopasować dowolny znak, w tym nowy wiersz.
Backslash Uwaga : W językach, gdzie trzeba zadeklarować wzory z ciągów C pozwalających sekwencje (jak \ndla nowej linii), trzeba podwoić backslashy uciekających tak specjalne znaki, że silnik mógłby traktować je jako znaki dosłowne (na przykład w Javie, world\.będzie zadeklarowane jako "world\\."lub użyj klasy znaków:) "world[.]". Używaj nieprzetworzonych literałów łańcuchowych (Python r'\bworld\b'), dosłownych literałów łańcuchowych C # @"world\."lub ukośnych ciągów znaków / wyrażeń regularnych, takich jak /world\./.
^(?!foo$), dlaczego znak dolara musi znajdować się w nawiasach, aby wyrażenie działało? Spodziewałem ^(?!foo)$się dać te same wyniki, ale tak nie jest.
$kotwica znajduje się wewnątrz anteny, jest to część warunku, część tego stwierdzenia o zerowej szerokości . Gdyby znajdował się na zewnątrz, jak w ^(?!foo)$, będzie częścią wzorca konsumpcji wymagającego końca łańcucha zaraz po rozpoczęciu łańcucha, co sprawi, że negatywne spojrzenie w przód nie będzie miało znaczenia, ponieważ zawsze zwróci prawdę (nie może być tekstu po końcu łańcucha , nie mówiąc już foo). Tak więc ^(?!foo$)dopasowuje początek łańcucha, który nie jest śledzony foo, po którym następuje koniec łańcucha. ^(?!foo)$dopasowuje pusty ciąg.
cotlub lani usunąć dopasowanie, jak regex.replace(myString, "^.*?(?:cot|lan)\s*", "").
Możesz umieścić a ^na początku zestawu znaków, aby dopasować wszystko oprócz tych znaków.
[^=]*
dopasuje wszystko oprócz =
Po prostu dopasuj, /^index\.php/a następnie odrzuć wszystko, co pasuje.
str !~ /\Aindex\.php/.
Potrzebuję regex stanie dopasować wszystko, ale except się ciąg rozpoczynający się od
index.phpokreślonego wzoru (konkretnie index.php a co za tym idzie, jak index.php? Id = 2342343)
Użyj metody 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]);
LUB INNE MECZE
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);
Może nie użyjesz wyrażenia regularnego:
// In PHP
0 !== strpos($string, 'index.php')
grepW wierszu poleceń, Perl / Python / w dowolnym innym języku lub w poleceniu „Wykonaj wyrażenie regularne dla każdej linii” w edytorze tekstów itp.)