Соответствующее регулярное выражение не работает должным образом в zsh - PullRequest
0 голосов
/ 16 апреля 2020

Я нахожу некоторые неправильные результаты здесь bash. Я не знаю, почему кто-то может помочь понять, что происходит

   $ [[ example.com/something =~ .*\.mp4\?.* ]] && echo matched2
   matched2

Мое регулярное выражение ^.*\.mp4\?.* должно совпадать только с чем-то вроде example.com/file.mp4?size=large, но почему его сопоставление без такого шаблона здесь.

Я использую zsh

$ zsh --version
zsh 5.7.1 (x86_64-pc-linux-gnu)

1 Ответ

1 голос
/ 16 апреля 2020

Обратные косые черты не являются частью регулярного выражения; оболочка выполняет удаление кавычек, чтобы сгенерировать регулярное выражение .*.mp4?.*, которое соответствует любой строке, содержащей 1 или более произвольных символов, за которыми следует mp и необязательный 4. Вы также должны экранировать обратную косую черту.

[[ example.com/something =~ .*\\.mp4\\?.* ]] && echo matched2

При этом будет получено требуемое регулярное выражение .*\.mp4\?.*.

(Обратите внимание, что регулярное выражение не привязано к началу или концу входной строки, поэтому достаточно \\.mp4\\? или '\.mp4\?'. )

...