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

StackOverflow https://stackoverflow.com/questions/116819

  •  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).*$

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top