Назад | Перейти на главную страницу

Почему это регулярное выражение не работает в Linux?

Я не могу сказать, что он работает в Windows, но, насколько я понимаю, это регулярное выражение правильное и то, как я его написал (кроме, возможно, ^ в начале)

Из http://www.velocityreviews.com/forums/showpost.php?p=382944&postcount=3

^.+\.((jpg)|(gif)|(exe))$

Когда я бегу

find -regex '^.+\.((jpg)|(gif)|(exe))$'

мой exe не отображается, когда я пишу

find -regex '^.+\.exe$'

Оно делает. Почему не find -regex хочу использовать () или (()|())? Я всегда думал, что это справедливо для всего.

GNU find по умолчанию использует регулярные выражения emacs, вы можете изменить этот тип с помощью -regextype вариант (см. поиск человека).

Если вы используете -regextype posix-egrep ваше выражение, кажется, работает. Тогда вы также, вероятно, могли бы уменьшить шаблон до ^.+(jpg|gif|exe)$

С emacs: find . -regex '.+\(jpg\|gif\|exe\)$' . Видеть этот раздел руководства по emacs для этих конкретных правил регулярных выражений. Вам нужно бежать | и () чтобы они не были буквальными.

В регулярных выражениях emacs (, | и ) буквально если только с экранированием, это полная противоположность всем другим форматам регулярных выражений.

Ваше выражение работает как ^.+\.\(jpg\|exe\|gif\)$.