Explain 1:
1、正则表达式是用来匹配字符串的,这个就不解释了
2、通配符是用来通配的,也就是shell在做Pathname Expansion时用到的
Explain 2:
通配符,说白了一般只用于文件名匹配, 它是由shell解析的。所谓的系统level的概念非常含糊,什么是系统level的?我们知道shell是一个命令解释器,它是内核的外壳,用于完成 操作系统使用者与内核的沟通,因此,通配符实际上就是一个shell解释器去解析的符号,它的特殊涵义是由shell这个命令解释器赋予的。通配符的英文 名是wildcard,就是万用牌的意思,它相当简单,一般来说,*nix系统上面的shell大多将三个特殊符号当作通配符,它们是 * ? [...], 其中 * 表示匹配任意长度的任意字符; ? 表示匹配一个任意字符, 而[...]则表示匹配括号中列出的字符中的任意一个。
什么是正则表达式(regular expression, 缩写是regex.)?从简单的角度去理解,你可以把正则表达式看成是一种字符串匹配模式标准。这里最重要的就是,它本身,只是一种业界流行的标准,或者说,它是相当于对字符串匹配模式的一种规定。这种规定是随着相关的工具软件的发展而自称体系的“不成文规矩”。
-- 举个例子好了。假设首先有一种工具软件能够根据“模式(pattern)”搜索字符串,这个工具非常流行,以至于后续的工具软件都效仿那个工具软件定义的模式规则来匹配字符串 -- 慢慢的就形成标准,而且相对来说是一种不成文的规矩.
所以,正则表达式是什么? -- 它是一种对字符串匹配模式的描述和规定 -- 并且是一种标准。而不同的工具程序,也就是egrep、sed、awk这样的程序,以各种程度来支持这种字符串搜索模式,它们就是标准的实现,你可以在这种软件中使用正则表达式这种“匹配模式标准”。
在什么地方使用通配符?答案是只要是shell命令行或者shell脚本中,你都可以使用通配符;
在什么地方使用正则表达式?当你使用能够支持正则表达式的工具软件进行字符串处理时你就可以使用正则表达式。你还可以在支持正则表达式的语言中使用正则表达式,比如perl, java... C++中也有专门用于支持正则表达式的库。正则表达式总是和“使用什么工具软件或者语言”相关。相对来说,不同的工具和语言对正则表达式的支持程度不同,*nix里面将这些工具软件的对正则表达式的支持分类,因此也就有了“基础正则表达式”和“扩展正则表达式”。
正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
. 匹配除
以外的任意符号
^ 从字符串开始位置进行匹配
$ 从字符串结尾进行匹配
* 前导字符的0-∞
+ 前导字符的1-∞
? 前导字符的0-1
{2,3} 前导字符的2-3
| 或
转义
[] 字符组内的任一字符
() 分组