我曾是尝试在某个目录中查找不符合类 UNIX 系统命名准则的文件。
与 find 命令一起使用时find <dir> -regex '.*[^-_./0-9a-zA-Z].*'
返回感兴趣的文件。
我对上面命令行的问题是:
- 为什么我们需要任意一个字符
.
之前的元字符零个或多个*
元字符分别位于正则表达式的开头和结尾,以便按预期工作。当我最初尝试时find <dir> -regex '*[^-_./0-9a-zA-Z]*'
没有返回任何结果。 - 此外,如果我将
character ranges
正则表达式中的 替换为与POSIX character classes
其他所有内容相对应的内容:find <dir> -regex '.*[^-_./[:digit:][:lower:][:upper:]].*'
它不会返回任何内容。为什么会这样?
蒂亚!
答案1
*
在正则表达式语法中是量词应用于前一个正则表达式原子(在本例中为.
)。这是不是它本身是一个“零个或多个元字符”,就像 shell 模式匹配语法(又名“globbing”)中一样。可能是默认 Emacs 正则表达式类型的特殊之处 -例如,如果您想要更熟悉的行为,请尝试
-regextype posix-basic
或。-regextype egrep