2

我看到*在某些命令中使用了通配符,例如:find *.jpg,这意味着查找任何以 . 结尾的文件.jpg。但是,在正则表达式中,.*也意味着任何字符出现 0 次或多次。那么,它们之间有什么区别呢?何时*使用,何时使用.*

4

2 回答 2

5

在正则表达式中,*是“零个或多个”重复标记。 .是“任何单个字符(带有警告)”表达式。

在 afind中,*字符是“任何东西”通配符,并不是真正的正则表达式字符。?是此类搜索情况中的“任何单个字符” 。

于 2013-10-30T03:46:27.497 回答
3

文件名匹配模式(或glob)和正则表达式是两个相似但不同的东西。

对他们来说,大多数字符只是简单地匹配自己,并且某些特殊字符具有特殊含义,可以通过在它们前面加上反斜杠来抑制\

在文件名匹配模式(由 shell 和find命令使用)中,?匹配任何单个字符并*匹配零个或多个任意字符。A .(句号)不是特殊字符;它只匹配一个文字.字符。

在正则表达式(由grep、许多文本编辑器和大多数对文本执行搜索的命令使用)中,.匹配任何单个字符并*表示其前面的任何内容出现零次或多次。

远不止这些。文件名匹配模式对名称以 开头的“隐藏”文件有特殊的规则.,并且语法和规则在不同 shell 之间可能有所不同。正则表达式也以多种形式存在(例如grepvs. egrep、 vs. Perl 或 PCRE)。

于 2013-11-02T03:13:44.033 回答