为什么这个正则表达式在 Linux 上不起作用?

为什么这个正则表达式在 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使用()或者(()|())?我一直认为这对一切都有效。

答案1

GNU find 默认使用 emacs 正则表达式,您可以使用-regextype选项更改该类型(参见 man find)。

如果你使用-regextype posix-egrep你的表达似乎有效。然后你也可以将模式简化为^.+(jpg|gif|exe)$

使用 emacs:。find . -regex '.+\(jpg\|gif\|exe\)$'请参阅emacs 手册的这一部分针对那些特定的正则表达式规则。您需要进行转义|,并且()不要将其视为文字。

答案2

在 emacs 正则表达式中(|)是文字除非转义,这与所有其他正则表达式格式完全相反。

你的表情就像^.+\.\(jpg\|exe\|gif\)$

相关内容