Подтвердить что ты не робот

Регулярное выражение для исключения набора ключевых слов

Я хочу выражение, которое потерпит неудачу, когда оно встретит такие слова, как "boon.ini" и "http". Целью было бы принять это выражение и иметь возможность построить для любого набора ключевых слов.

4b9b3361

Ответ 1

^(?:(?!boon\.ini|http).)*$\r?\n?

(взято из RegexBuddy библиотека) будет соответствовать любой строке, которая не содержит boon.ini и/или http. Это то, что вы хотели?

Ответ 2

Альтернативное выражение, которое можно использовать:

^(?!.*IgnoreMe.*).*$

^ = указывает начало строки
$ = указывает конец строки
(?! Expression) = указывает отрицательную совпадение нулевой ширины в выражении

Требуется ^ на фронте, иначе при оценке негативный взгляд вперед может начинаться где-то внутри/за текстом "IgnoreMe" - и сделать совпадение, в котором вы тоже этого не хотите.

например. Если вы используете регулярное выражение:

(?!.*IgnoreMe.*).*$

При вводе "Hello IgnoreMe Please" это приведет к чему-то вроде: "gnoreMe Please", поскольку негативный взгляд ожидает, что после "I" нет полной строки "IgnoreMe".

Ответ 3

Вместо того, чтобы отрицать результат в выражении, вы должны сделать это в своем коде. Таким образом, выражение становится довольно простым.

\b(boon\.ini|http)\b

Вернул бы true, если boon.ini или http был где угодно в вашей строке. Он не будет соответствовать словам, подобным httpd или httpxyzzy, из-за \b или границ слов. Если вы хотите, вы можете просто удалить их, и они будут соответствовать этим тоже. Чтобы добавить больше ключевых слов, просто добавьте больше труб.

\b(boon\.ini|http|foo|bar)\b

Ответ 4

вам может быть хорошо подано, написав регулярное выражение, которое будет успешным, когда оно встретит слова, которые вы ищете, а затем инвертируйте условие.

Например, в perl вы должны использовать:

if (!/boon\.ini|http/) {
    # the string passed!
}

Ответ 5

^[^£]*$

Вышеприведенное выражение ограничивает только символ фунта из строки. Это позволит использовать все символы, кроме строки.

Ответ 6

Какая библиотека языка/регулярного выражения? Я думал, что вы сомневаетесь в ASP.NET, и в этом случае вы можете увидеть раздел "негативный взгляд" этой статьи: http://msdn.microsoft.com/en-us/library/ms972966.aspx

Строго говоря, отрицание регулярного выражения по-прежнему определяет правильный язык, но очень мало библиотек/языков/инструментов, которые позволяют его выразить.

Отрицательный вид может служить вам одинаковым, но фактический синтаксис зависит от того, что вы используете. Ответ Тима - пример с (?...)

Ответ 7

Я использовал это (на основе ответа Тима Пицкера), чтобы исключить непроизводные URL-адреса субдомена для фильтров профиля Google Analytics:

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$

Вы можете увидеть контекст здесь: Регулярное выражение для исключения нескольких слов