Ответ 1
Не эксперт по регулярному выражению, но я думаю, что с самого начала можно было бы использовать негативный взгляд. ^(?!foo).*$
не должно соответствовать чему-либо, начиная с foo
.
Мне нужно регулярное выражение, способное сопоставить все , но строку, начинающуюся с определенного шаблона (в частности index.php
и следующего, как index.php?id=2342343
)
Не эксперт по регулярному выражению, но я думаю, что с самого начала можно было бы использовать негативный взгляд. ^(?!foo).*$
не должно соответствовать чему-либо, начиная с foo
.
Вы можете поместить ^
в начале набора символов, чтобы оно соответствовало чему-либо, кроме этих символов.
[^=]*
будет соответствовать всем, кроме =
Regex: соответствие всем , но:
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 соответствует, это не то, что нам нужно, иначе, возьмите значение соответствия, если не пусто.[^a-z]+
(любой char, отличный от строчного ASCII письмо)|
: [^|]+
Демонстрационная заметка: новая строка \n
используется внутри классов с отрицанием символов в демонстрационных целях, чтобы избежать переполнения соответствия соседней строке. Они не нужны при тестировании отдельных строк.
Якорная заметка. На многих языках используйте \A
для определения однозначного начала строки и \z
(в Python это \z
, в JavaScript, $
- OK), чтобы определить самый конец строки.
Точечная заметка: во многих вариантах (но не в POSIX, TRE, TCL), .
соответствует любой char, но новой строке char. Убедитесь, что вы используете соответствующий модификатор DOTALL (/s
в PCRE/Boost/.NET/Python/Java и /m
в Ruby) для .
для соответствия любому char, включая новую строку.
Заметка обратной смены. На языках, где вы должны объявлять шаблоны со строками C, позволяющими escape-последовательности (например, \n
для новой строки), вам нужно удвоить обратную косую черту, ускользающую от специальных символов, чтобы движок может относиться к ним как к буквальным символам (например, в Java, world\.
будет объявлен как "world\\."
или использовать класс символов: "world[.]"
). Используйте строковые литералы строки (Python r'\bworld\b'
), строковые литералы строки С# @"world\."
или slashy строки/регулярные выражения, например /world\./
.
Просто сопоставьте /^index\.php/
, затем отклоните все, что соответствует ему.
В python:
>>> 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);
grep -v в оболочке
! ~ в perl
Пожалуйста, добавьте больше на другие языки - я отметил это как Community Wiki.
Как не использовать регулярное выражение:
// In PHP
0 !== strpos($string, 'index.php')