擁有筆記本正則表達(dá)式更多的功能。BRE 與 ERE 在大多數(shù)的 meta 字符與功能應(yīng)用上幾乎是完全一致,單 ERE 理由寫(xiě) meta 字符看起來(lái)與 BRE 類似,卻具有完全不同的類型。
擴(kuò)展正則表達(dá)式與基礎(chǔ)正則表達(dá)式的唯一區(qū)別在于:? + () {} 這幾個(gè)字符。基礎(chǔ)正則表達(dá)式中,如果你想? + () {} 表示特殊含義,你需要將他們轉(zhuǎn)義。而擴(kuò)展正則表達(dá)式中,如果你想? + () {} 不表示特殊含義,你需要將他們轉(zhuǎn)義。轉(zhuǎn)義符號(hào),都是一樣的,\ 符號(hào)。
所謂特殊含義,就是正則表達(dá)式中的含義。非特殊含義,就是這個(gè)符號(hào)本身。
例如
[root@shellcn.net ~#] echo aaa|grep 'a?';[root@shellcn.net ~#] echo aaa|grep 'a\?';aaa#egrep
使用的是擴(kuò)展正則表達(dá)式 [root@shellcn.net ~#] echo aaa|egrep 'a?';aaa[root@shellcn.net ~#] echo aaa|egrep 'a\?';
可見(jiàn),擴(kuò)展正則表達(dá)式與基礎(chǔ)正則表達(dá)式的區(qū)別,就是它們加不加轉(zhuǎn)義符號(hào),代表的意思剛好相反。
ERE 歷史沒(méi)有后向引用的。圓括號(hào)在 ERE 里具有特殊含義,但和 BRE 里使用的又有所不同。在 ERE 里,\ ( 與 \ ) 匹配的是字面上的左括號(hào)與右括號(hào)。
ERE 在匹配多字符這方面,與 BRE 有明顯的不同,不過(guò)在 (*) 的處理上和 BRE 是相同的。
注意:
ERE 另有兩個(gè) meta 字符,可更細(xì)膩的處理匹配控制:
?
匹配于 0 個(gè)或一個(gè)前置正則表達(dá)式+
匹配于一個(gè)或多個(gè)前置正則表達(dá)式可以把? 想象成是” 可選用的”,也就是說(shuō),匹配前置正則表達(dá)式的文本,要么出現(xiàn),要么沒(méi)出現(xiàn)。例如: 與 ab?c 匹配的有 ac 與 abc,就這兩者 ! (與 ab*c 相較之下,后者匹配于中間有人一個(gè) b)。
+ 字符在概念上與 *meta
字符類似,不過(guò)前置正則表達(dá)式要匹配的文本在這里至少得出現(xiàn)一次。例如 ab+c 匹配于 abc,abbc,abbbc,但是不匹配于 ac。ab+c 的正則表達(dá)式等價(jià)于 abbc; 無(wú)論如何,當(dāng)前值正則表達(dá)式很復(fù)雜時(shí),使用 + 可以少打一點(diǎn)字,這就減少了打錯(cuò)字的幾率。
方括號(hào)運(yùn)算符一宇表示” 匹配于次祖父,或其他字符,或...”,但不能指定” 匹配于這個(gè)序列,或其他序列”。要達(dá)到后者的目的,可以使用管道運(yùn)算符 (|)。例如 read | write 匹配于 read 與 write 兩者,fast|slow 匹配于 fast 與 slow。| 字符是 ERE 運(yùn)算符;i 優(yōu)先級(jí)最低的。