通配符与正则表达式很容易混淆,首先要明白二者是不同的。通配符用于Linux的shell命令(如文件名相关操作)中,而正则表达式用于文本内容中的字符串搜索和替换等。通配符是Linux系统本身就支持的,而正则表达式用于vim编辑器或awk程序。
几个典型区别:
通配符
*:匹配0个字符或多个字符。
正则表达式:
*:匹配该字符的前一个字符的0次或多次出现。
正则表达式:
正则表达式是大小写敏感的。
要想匹配行首的字符要使用抑扬字符(^),当抑扬字符(^)出现在方括号中时,它表示“排除”。
.点
|
匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
|
?
|
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
|
*
|
匹配前面的子表达式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。
|
(pattern) | 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果“匹配”集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用“\(”或者“\)”。 |
(?:pattern) | 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“or”字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。 |
x|y | 匹配 x 或 y。例如,'z|food' 匹配“z”或“food”。'(z|f)ood' 匹配“zood”或“food”。 |
[xyz]
|
字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
|
[^xyz]
|
负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
|
参考:
http://baike.baidu.com/link?url=WEH-vBcoiAqWXGycIf4Vwp9Hm5WEx9TLqVCNrhCSk6Zfo2hN1MrNjG588auPrLRsq9bDeX9EHYAVrMW8jS2sk_