Регулярное выражение для исключения набора ключевых слов
-
02-07-2019 - |
Вопрос
Мне нужно выражение, которое не будет работать при встрече таких слов, как «boon.ini» и «http».Цель состоит в том, чтобы взять это выражение и построить его для любого набора ключевых слов.
Решение
^(?:(?!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
если boon.ini или http были где-нибудь в вашей строке.Он не будет соответствовать таким словам, как httpd или httpxyzzy, из-за \b
, или границы слов.Если хотите, вы можете просто удалить их, и они тоже будут соответствовать им.Чтобы добавить больше ключевых слов, просто добавьте больше каналов.
\b(boon\.ini|http|foo|bar)\b
вам может быть полезно написать регулярное выражение, которое будет преуспевать когда он встретит слова, которые вы ищете, а затем инвертируйте условие.
Например, в Perl вы должны использовать:
if (!/boon\.ini|http/) {
# the string passed!
}
^[^£]*$
Вышеприведенное выражение ограничивает использование в строке только символа фунта.Это позволит использовать все символы, кроме строки.
Какая библиотека языка/регулярных выражений?Я думал, что ваш вопрос касается ASP.NET, и в этом случае вы можете увидеть раздел «негативный взгляд» в этой статье:http://msdn.microsoft.com/en-us/library/ms972966.aspx
Строго говоря, отрицание регулярного выражения по-прежнему определяет регулярный язык, но существует очень мало библиотек/языков/инструментов, которые позволяют его выразить.
Отрицательный внешний вид может служить вам тем же, но фактический синтаксис зависит от того, что вы используете.Ответ Тима является примером с (?...)
Я использовал это (на основе ответа Тима Пицкера), чтобы исключить непроизводственные URL-адреса поддоменов для фильтров профиля Google Analytics:
^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$
Посмотреть контекст можно здесь: Регулярное выражение для исключения нескольких слов