Регулярное выражение для исключения набора ключевых слов
Я хочу выражение, которое потерпит неудачу, когда он сталкивается со словами, такими как " Бун.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).*$
вы можете увидеть здесь: регулярное выражение для исключения нескольких слов