Нет, вы не можете использовать mysql
и mysqli
вместе. Они представляют собой отдельные API-интерфейсы, и создаваемые ими ресурсы несовместимы друг с другом.
Однако есть mysqli_close
.
Не эксперт по регулярному выражению, но я думаю, что с самого начала вы могли бы использовать негативный взгляд. ^(?!foo).*$
не должен соответствовать чему-либо, начиная с foo
.
В 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>
grep -v в shell
! ~ in perl
Пожалуйста, добавьте больше на другие языки - я отметил это как Community Wiki.
Вы можете поместить ^
в начале набора символов в соответствие с любым, кроме этих символов.
[^=]*
будет соответствовать всем, кроме =
Как не использовать регулярное выражение:
// In PHP
0 !== strpos($string, 'index.php')
grep
в командной строке, например, или Perl / Python / любой другой язык, или команду «Выполнять это регулярное выражение для каждой строки» в текстовом редакторе и т. Д.).
– rinogo
19 November 2015 в 22:56
Просто сопоставьте /^index\.php/
, затем отклоните все, что соответствует ему.
Regex: соответствие всем, кроме:
foo
): Решение, основанное на Lookahead для NFA: ^(?!foo).*$
^(?!foo)
Решение с отклоненным символьным классом для двигателей с регулярным выражением, не поддерживающее обратные просмотры : ^(([^f].{2}|.[^o].|.{2}[^o]).*|.{0,2})$
^([^f].{2}|.[^o].|.{2}[^o])|^.{0,2}$
world.
в конце): Lookbehind на основе: (?<!world\.)$
^.*(?<!world\.)$
Обходной путь POSIX: ^(.*([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.])|.{0,5})$
([^w].{5}|.[^o].{4}|.{2}[^r].{3}|.{3}[^l].{2}|.{4}[^d].|.{5}[^.]$|^.{0,5})$
foo
) (нет POSIX-совместимого patern, извините): ^(?!.*foo)
^(?!.*foo).*$
|
): ^[^|]*$
foo
): Lookaround: ^(?!foo$)
^(?!foo$).*$
POSIX: ^(.{0,2}|.{4,}|[^f]..|.[^o].|..[^o])$
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), .
соответствует любому char , но символ новой строки . Убедитесь, что вы используете соответствующий модификатор DOTALL (/s
в PCRE / Boost / .NET / Python / Java и /m
в Ruby) для .
для соответствия любому символу, содержащему новую строку.
Замечание обратной косой черты: на языках, где вы должны объявлять шаблоны со строками C, позволяющими escape-последовательности (например, \n
для новой строки), вам нужно удвоить обратную косую черту, ускользающую от специальных символов, чтобы движок мог рассматривать их как буквенные символы (например, в Java , world\.
будет объявлен как "world\\."
или использовать класс символов: "world[.]"
). Используйте исходные строковые литералы (Python r'\bworld\b'
), строковые литералы строки C # @"world\."
или строковые строковые / регулярные обозначения типа /world\./
.
^(?!foo$)
, почему знак доллара должен находиться в круглых скобках для работы выражения? Я ожидал, что ^(?!foo)$
даст те же результаты, но это не так.
– Grant Humphries
7 January 2017 в 18:10
$
находится внутри lookahead, он является частью условия, части этого утверждения нулевой ширины i>. Если он был снаружи, как в ^(?!foo)$
, он будет частью шаблона потребляющего i>, требующего окончания строки сразу после начала строки, делая отрицательный lookahead неактуальным, поскольку он всегда будет возвращать true i> (после окончания строки не может быть никакого текста, не говоря уже о foo
). Таким образом, ^(?!foo$)
соответствует началу строки, за которой не следует foo
, за которым следует конец строки. ^(?!foo)$
соответствует пустой строке.
– Wiktor Stribiżew
7 January 2017 в 20:12
^((?!foo).)*$
( stackoverflow.com/a/406408/3964381 ) – gilad mayani 22 June 2017 в 12:28