我看到*
在某些命令中使用了通配符,例如:find *.jpg
,这意味着查找任何以 . 结尾的文件.jpg
。但是,在正则表达式中,.*
也意味着任何字符出现 0 次或多次。那么,它们之间有什么区别呢?何时*
使用,何时使用.*
?
问问题
1906 次
2 回答
5
在正则表达式中,*
是“零个或多个”重复标记。 .
是“任何单个字符(带有警告)”表达式。
在 afind
中,*
字符是“任何东西”通配符,并不是真正的正则表达式字符。?
是此类搜索情况中的“任何单个字符” 。
于 2013-10-30T03:46:27.497 回答
3
文件名匹配模式(或glob)和正则表达式是两个相似但不同的东西。
对他们来说,大多数字符只是简单地匹配自己,并且某些特殊字符具有特殊含义,可以通过在它们前面加上反斜杠来抑制\
。
在文件名匹配模式(由 shell 和find
命令使用)中,?
匹配任何单个字符并*
匹配零个或多个任意字符。A .
(句号)不是特殊字符;它只匹配一个文字.
字符。
在正则表达式(由grep
、许多文本编辑器和大多数对文本执行搜索的命令使用)中,.
匹配任何单个字符并*
表示其前面的任何内容出现零次或多次。
远不止这些。文件名匹配模式对名称以 开头的“隐藏”文件有特殊的规则.
,并且语法和规则在不同 shell 之间可能有所不同。正则表达式也以多种形式存在(例如grep
vs. egrep
、 vs. Perl 或 PCRE)。
于 2013-11-02T03:13:44.033 回答