匹配的正则表达式在zsh中无法正常工作



我在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)

反斜杠不是正则表达式的一部分;shell执行引号移除以生成正则表达式.*.mp4?.*,该表达式匹配任何包含1个或多个任意字符的字符串,然后是mp和可选的4。您还需要转义反斜杠。

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

这将产生所需的正则表达式.*.mp4?.*

(请注意,正则表达式没有锚定在输入字符串的开头或结尾,因此\.mp4\?'.mp4?'就足够了。(

最新更新