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

6 linux find regex

我不能说它适用于 Windows,但根据我的理解,这个正则表达式是正确的,以及我将如何编写它(也许^开头除外)

来自http://www.velocityreviews.com/forums/showpost.php?p=382944&postcount=3

^.+\.((jpg)|(gif)|(exe))$
Run Code Online (Sandbox Code Playgroud)

当我跑

find -regex '^.+\.((jpg)|(gif)|(exe))$'
Run Code Online (Sandbox Code Playgroud)

我写的时候exe不显示

find -regex '^.+\.exe$'
Run Code Online (Sandbox Code Playgroud)

确实如此。为什么find -regex不想使用()或者(()|())?我一直认为这对一切都有效。

Kyl*_*ndt 11

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

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

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