Как использовать негативный просмотр в регулярном выражении? [Дубликат]

Нет, вы не можете использовать mysql и mysqli вместе. Они представляют собой отдельные API-интерфейсы, и создаваемые ими ресурсы несовместимы друг с другом.

Однако есть mysqli_close.

152
задан Yu Hao 20 July 2013 в 11:16
поделиться

7 ответов

Не эксперт по регулярному выражению, но я думаю, что с самого начала вы могли бы использовать негативный взгляд. ^(?!foo).*$ не должен соответствовать чему-либо, начиная с foo.

135
ответ дан Cat Plus Plus 21 August 2018 в 07:06
поделиться

В 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>
2
ответ дан AJ. 21 August 2018 в 07:06
поделиться

grep -v в shell

! ~ in perl

Пожалуйста, добавьте больше на другие языки - я отметил это как Community Wiki.

-2
ответ дан Arkadiy 21 August 2018 в 07:06
поделиться
  • 1
    OP специально запросил регулярное выражение ... Я не уверен, что это помогает! (У него, конечно, есть причины для запроса регулярного выражения, он не спрашивал: «Как я могу решить это с помощью любой произвольной технологии?») – rinogo 19 November 2015 в 22:56

Вы можете поместить ^ в начале набора символов в соответствие с любым, кроме этих символов.

[^=]*

будет соответствовать всем, кроме =

168
ответ дан Firsh 21 August 2018 в 07:06
поделиться
  • 1
    Это правда, но он обрабатывает только один символ за раз. Если вы хотите исключить последовательность из двух или более символов, вы должны использовать отрицательный результат, как и другие респонденты. – Alan Moore 20 July 2013 в 11:42

Как не использовать регулярное выражение:

// In PHP
0 !== strpos($string, 'index.php')
-4
ответ дан JP. 21 August 2018 в 07:06
поделиться
  • 1
    OP специально запросил регулярное выражение ... Я не уверен, что это помогает! (Он может использовать grep в командной строке, например, или Perl / Python / любой другой язык, или команду «Выполнять это регулярное выражение для каждой строки» в текстовом редакторе и т. Д.). – rinogo 19 November 2015 в 22:56

Просто сопоставьте /^index\.php/, затем отклоните все, что соответствует ему.

1
ответ дан user 21 August 2018 в 07:06
поделиться

Regex: соответствие всем, кроме:

Демонстрационная заметка: новая строка \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\./.

139
ответ дан Wiktor Stribiżew 21 August 2018 в 07:06
поделиться
  • 1
    Отличная запись! В случае «строки (не), равной некоторой строке», с примером ^(?!foo$), почему знак доллара должен находиться в круглых скобках для работы выражения? Я ожидал, что ^(?!foo)$ даст те же результаты, но это не так. – Grant Humphries 7 January 2017 в 18:10
  • 2
    @GrantHumphries: Когда якорь $ находится внутри lookahead, он является частью условия, части этого утверждения нулевой ширины . Если он был снаружи, как в ^(?!foo)$, он будет частью шаблона потребляющего , требующего окончания строки сразу после начала строки, делая отрицательный lookahead неактуальным, поскольку он всегда будет возвращать true (после окончания строки не может быть никакого текста, не говоря уже о foo). Таким образом, ^(?!foo$) соответствует началу строки, за которой не следует foo, за которым следует конец строки. ^(?!foo)$ соответствует пустой строке. – Wiktor Stribiżew 7 January 2017 в 20:12
Другие вопросы по тегам:

Похожие вопросы: