3 回答

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
因?yàn)檫@是一個(gè)常見(jiàn)的常見(jiàn)問(wèn)題解答,所以讓我列出一些Bash不支持的結(jié)構(gòu),以及如何解決它們,這里有一個(gè)簡(jiǎn)單的解決方法。
正則表達(dá)式有多種常用方言。Bash支持的是擴(kuò)展正則表達(dá)式的變體。例如,這不同于許多在線正則表達(dá)式測(cè)試器支持的功能,后者通常是更現(xiàn)代的Perl 5 / PCRE變體。
擊不支持
\d
\D
\s
\S
\w
\W
-這些可以與POSIX字符類(lèi)等同替換[[:digit:]]
,[^[:digit:]]
,[[:space:]]
,[^[:space:]]
,[_[:alnum:]]
,和[^_[:alnum:]]
,分別。(請(qǐng)注意最后一種情況,其中[:alnum:]
POSIX字符類(lèi)使用下劃線增強(qiáng),以完全等同于Perl的\w
速記形式。)Bash不支持非貪婪匹配。有時(shí)您可以
a.*?b
用類(lèi)似的東西代替,a[^ab]*b
以在實(shí)踐中獲得類(lèi)似的效果,盡管兩者并不完全相同。Bash不支持非括號(hào)
(?:...)
。在平凡的情況下,只需使用捕獲括號(hào)即可(...)
;當(dāng)然,如果您使用捕獲組和/或反向引用,則會(huì)重新編號(hào)捕獲組。擊不支持lookarounds像
(?<=before)
或者(?!after)
,事實(shí)上任何與(?
是一個(gè)Perl擴(kuò)展。盡管您經(jīng)??梢詫?wèn)題改寫(xiě)為可以避免環(huán)顧的問(wèn)題,但沒(méi)有簡(jiǎn)單的常規(guī)解決方法。

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
從 man bash
可以使用附加的二進(jìn)制運(yùn)算符=?,其優(yōu)先級(jí)與==和!=相同。使用它時(shí),運(yùn)算符右邊的字符串將被視為 擴(kuò)展的正則表達(dá)式并進(jìn)行相應(yīng)的匹配(如regex(3)中一樣)。
ERE不支持先行/后退。但是,您的代碼((?!Disk))中有它們。
這就是為什么您的正則表達(dá)式不符合您預(yù)期的原因。
- 3 回答
- 0 關(guān)注
- 504 瀏覽
添加回答
舉報(bào)