Explain 1:
一、正則表達式是用來匹配字符串的,這個就不解釋了
二、通配符是用來通配的,也就是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裏面將這些工具軟件的對正則表達式的支持分類,所以也就有了「基礎正則表達式」和「擴展正則表達式」。
不一樣的工具對正則表達式的支持,其實有些許的微妙不一樣;可是整體來講,使用正則仍是基本按照標準來的。這些不一樣的工具支持程度,被稱之爲「正則流派」。而 工具軟件中支持這種匹配模式的那部分代碼,稱之爲「正則引擎」。因爲perl對正則表達式的支持很是到位,其正則引擎也比較優秀,所以perl語言算是正 則的一大流派,目前大部分對正則的支持都或多或少參考了perl語言中的標準。