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

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

7 ответов


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

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


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

^(?!.*IgnoreMe).*$

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

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

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

(?!.*IgnoreMe).*$

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


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

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

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

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

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

например, в perl вы бы использовали:

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

^[^£]*$

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


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

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

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


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

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

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