正则表达式中的 * 和 .* 有什么区别?

inj*_*joy 2 regex glob wildcard

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

abi*_*ssu 5

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

在 a 中,find*字符是“任意”通配符,并不是真正的正则表达式字符。?在这种搜索情况下,这是“任何单个字符”。


Kei*_*son 5

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

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

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

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

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