正则表达式中*和。*之间有什么区别?

时间:2013-10-30 03:41:58

标签: regex wildcard glob

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

2 个答案:

答案 0 :(得分:3)

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

find中,*字符是“任何”通配符,并不是真正的正则表达式字符。 ?是此类搜索环境中的“任何单个字符”。

答案 1 :(得分:2)

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

对于它们两者而言,大多数字符只是匹配自己,而某些特殊字符具有特殊含义,可以通过在它们前面添加反斜杠\来抑制它们。

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

在正则表达式中(由grep使用,许多文本编辑器和大多数执行文本搜索的命令),.匹配任何单个字符,*表示零或更多发生在它之前的任何事情。

还有更多的东西。文件名匹配模式对名称以.开头的“隐藏”文件有特殊规则,语法和规则可能因shell而异。正则表达式也有多种形式(例如grepegrep,而不是Perl或PCRE)。