Я не смог найти правильное регулярное выражение для соответствия любой строке, не заканчивающейся каким-либо условием. Например, я не хочу сопоставлять что-либо, заканчивающееся на a
.
Это соответствует
b
ab
1
Это не совпадает
a
ba
Я знаю, что регулярное выражение должно заканчиваться, $
чтобы обозначить конец, хотя я не знаю, что должно предшествовать этому.
Изменить : Оригинальный вопрос, кажется, не является законным примером для моего случая. Итак: как обрабатывать более одного персонажа? Скажи что-нибудь не заканчивается ab
?
Я смог это исправить, используя эту тему :
.*(?:(?!ab).).$
Хотя недостатком этого является то, что он не соответствует строке из одного символа.
Ответы:
Вы не предоставляете нам язык, но если ваша поддержка регулярных выражений поддерживает утверждение , это то, что вам нужно:
(?<!a)
является отрицательным утверждением, которое гарантирует, что до конца строки (или строки сm
модификатором) не будет символа «a».Смотрите это здесь на Regexr
Вы также можете легко расширить это с другими символами, так как это проверка строки и не является классом символов.
Это будет соответствовать всему, что не заканчивается на "ab", посмотрите это на Regexr
источник
Используйте символ not (
^
):Если поставить
^
символ в начале скобок, это означает «все, кроме вещей в скобках».$
это просто якорь до конца.Для нескольких символов просто поместите их все в их собственный набор символов:
источник
ae
илиcb
.Для поиска файлов, не заканчивающихся на «.tmp», мы используем следующее регулярное выражение:
Протестировано с Regex Tester дает следующий результат:
источник
^.*(?![.]tmp$)
нет?.*
уже соответствует всей строке, поэтому оставшееся исключение больше не работает.приведенное выше регулярное выражение будет соответствовать строкам, которые не заканчиваются на
a
.источник
Попробуй это
[]
Обозначает класс символов, и^
инвертирует символьный класс , чтобы соответствовать все ноa
.источник
Вопрос старый, но я не смог найти лучшего решения, которое я разместил здесь. Найдите все USB-накопители, но не перечислите разделы , удалив, таким образом, «part [0-9]» из результатов. Я сделал два grep, последний сводит на нет результат:
Это приводит к моей системе:
Если бы я только хотел разделы, которые я мог бы сделать:
Где я получаю:
И когда я делаю:
Я получил:
источник
Принятый ответ хорошо, если вы можете использовать lookarounds. Однако есть и другой подход к решению этой проблемы.
Если мы посмотрим на широко предложенное регулярное выражение для этого вопроса:
.*[^a]$
Мы обнаружим, что это почти работает. Он не принимает пустую строку, что может быть немного неудобно. Тем не менее, это незначительная проблема при работе только с одним персонажем. Однако, если мы хотим исключить всю строку, например, «abc», то:
.*[^a][^b][^c]$
не буду делать Например, он не примет переменную.
Хотя есть простое решение этой проблемы. Мы можем просто сказать:
.{,2}$|.*[^a][^b][^c]$
или более обобщенная версия:
.{,n-1}$|.*[^firstchar][^secondchar]$
где п длина строки , которую вы хотите запретить (дляabc
его 3), иfirstchar
,secondchar
... есть первый, второй ... степени п символов вашей строки (дляabc
него будетa
, тоb
, тогдаc
).Это вытекает из простого наблюдения, что строка, которая короче, чем текст, который мы не запрещаем, не может содержать этот текст по определению. Таким образом, мы можем либо принять все, что короче («ab» не «abc»), либо что-нибудь достаточно длинное, чтобы мы могли это принять, но без окончания.
Вот пример поиска, который удалит все файлы, которые не являются .jpg:
find . -regex '.{,3}$|.*[^.][^j][^p][^g]$' -delete
источник
.{,2}$|.*[^a][^b][^c]$
не соответствуетccc
Все, что соответствует чему-то, заканчивающемуся на ---
.*a$
Итак, когда вы соответствуете регулярному выражению, отмените условие или, в качестве альтернативы, вы также можете сделать,.*[^a]$
где[^a]
означает все, чтоnot a
источник
Если вы используете
grep
илиsed
синтаксис будет немного другим. Обратите внимание, что последовательный[^a][^b]
метод здесь не работает:FWIW, я нахожу те же результаты в Regex101 , который я думаю, это синтаксис JavaScript.
Плохо: https://regex101.com/r/MJGAmX/2
Хорошо: https://regex101.com/r/LzrIBu/2
источник