gpt4 book ai didi

regex - 为什么这个正则表达式不起作用 : find ./-regex '.*\(m\|h\)$

转载 作者:行者123 更新时间:2023-12-03 10:36:34 25 4
gpt4 key购买 nike

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

  find ./ -regex '.*\(m\|h\)$

我注意到以下工作正常:
  find ./ -regex '.*\(m\)$'

但是当我通过添加 \|h 添加“或文件名末尾的 h”时它不起作用。也就是说,它应该把我所有的 *.m*.h文件,但我一无所获。

我在 Mac OS X 上。

最佳答案

在 Mac OS X 上,您不能使用 \|在基本的正则表达式中,这就是 find默认使用。

re_format man page

[basic] regular expressions differ in several respects. | is an ordinary character and there is no equivalent for its functionality.



在这种情况下,最简单的解决方法是更改​​ \(m\|h\)[mh] ,例如
find ./ -regex '.*[mh]$'

或者您可以添加 -E告诉 find 使用扩展正则表达式的选项。
find -E ./ -regex '.*(m|h)$'

不幸的是 -E不便携。

另请注意,如果您只想列出以 .m 结尾的文件或 .h ,你必须逃避点,例如
find ./ -regex '.*\.[mh]$'

如果您觉得这令人困惑(我也是),这里有一个很好的引用表,其中显示了哪些系统支持哪些功能。

Regex Syntax Summary [ Google Cache ]

关于regex - 为什么这个正则表达式不起作用 : find ./-regex '.*\(m\|h\)$,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com