Мені потрібен регулярний вираз, здатний відповідати всьому, окрім рядка, починаючи з певного шаблону (конкретно index.php
і що далі, як index.php?id=2342343
)
Мені потрібен регулярний вираз, здатний відповідати всьому, окрім рядка, починаючи з певного шаблону (конкретно index.php
і що далі, як index.php?id=2342343
)
Відповіді:
Не експерт по регулярному вибору, але я думаю, що ви могли використовувати негативний пошук з самого початку, наприклад, ^(?!foo).*$
не повинні відповідати нічого, починаючи з foo
.
^((?!foo).)*$
( stackoverflow.com/a/406408/3964381 )
Regex: відповідає всім, окрім :
foo
):
world.
в кінці):
foo
) (не відповідає лакової POSIX, вибачте):
|
символ):
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]+
(будь-яка таблиця, окрім букви ASCII)|
:[^|]+
Демо примітка : новий рядок \n
використовується всередині заперечених класів символів у демонстраціях, щоб уникнути переповнення відповідності до сусідніх рядків. Вони не потрібні при тестуванні окремих рядків.
Примітка прив’язки : У багатьох мовах використовуйте \A
для визначення однозначного початку рядка та\z
(у Python, це \Z
в JavaScript, $
це нормально) для визначення самого кінця рядка.
Примітка до точки : у багатьох ароматах (але не POSIX, TRE, TCL) .
відповідає будь-якому знаку, а не знаку нового рядка . Переконайтеся, що ви використовуєте відповідний модифікатор DOTALL ( /s
у PCRE / Boost / .NET / Python / Java та/m
Ruby), .
щоб відповідати будь-якому знаку, включаючи новий рядок.
Примітка зворотного косого ряду : мовами, де потрібно оголошувати візерунки з рядками C, що дозволяють виконувати послідовності втечі (наприклад, \n
для нового рядка), потрібно подвоїти косоокі риси, уникаючи спеціальних символів, щоб двигун міг трактувати їх як буквальні символи (наприклад, на Java, world\.
буде оголошено як "world\\."
або використовувати клас символів:) "world[.]"
. Використовуйте необроблені рядкові літерали (Python r'\bworld\b'
), @"world\."
дослідницькі рядки C # дословно або строгі рядки / регекс-літеральні позначення, як-от /world\./
.
^(?!foo$)
, чому так, що знак долара повинен бути в дужках, щоб вираз працював? Я розраховував ^(?!foo)$
дати ті ж результати, але це не так.
$
якір знаходиться всередині штриху, він є частиною умови, частиною цього твердження нульової ширини . Якщо він був зовні, як у ^(?!foo)$
, це буде частиною споживаючого шаблону, що вимагає закінчення рядка одразу після початку рядка, що робить негативний lookahead нерелевантним, оскільки він завжди повернеться true (текст не може бути після закінчення рядка , не кажучи вже про foo
). Отже, ^(?!foo$)
починається збіг початку рядка, який не дотримується foo
того, який слід з кінцем рядка. ^(?!foo)$
відповідає порожньому рядку.
cot
або lan
, і видалити відповідність, як regex.replace(myString, "^.*?(?:cot|lan)\s*", "")
.
Ви можете поставити ^
на початку набір символів, щоб відповідати будь-якому, крім цих символів.
[^=]*
відповідатиме всім, але =
Просто збіг, /^index\.php/
тоді відкиньте все, що відповідає.
str !~ /\Aindex\.php/
.
Мені потрібно регулярний вираз в стані відповідати всі , але за винятком того, в рядок , починаючи з
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')
grep
у командному рядку, наприклад, або Perl / Python / будь-якою іншою мовою, або командою "Виконати цей регулярний вираз для кожного рядка" у текстовому редакторі тощо).