我在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?'
就足够了。(