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