为什么这个正则expression式不能在linux上工作?

我不能说它在Windows上工作,但从我的理解这个正则expression式是正确的,我将如何写它(除了可能在^开始)

从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默认查找使用emacs正则expression式,您可以使用-regextype选项更改该types(请参阅man find)。

如果你使用-regextype posix-egrep你的expression似乎工作。 那么你也可以将模式简化为^.+(jpg|gif|exe)$

用emacs: find . -regex '.+\(jpg\|gif\|exe\)$' find . -regex '.+\(jpg\|gif\|exe\)$' 。 有关这些特定的正则expression式规则,请参阅本节的emacs手册 。 你需要逃避|()他们不是字面的。

在emacs中,regexps (|)是字面的, 除非被转义,这与所有其他正则expression式格式完全相反。

您的expression方式为^.+\.\(jpg\|exe\|gif\)$