3 回答
TA貢獻1844條經(jīng)驗 獲得超8個贊
因為這是一個常見的常見問題解答,所以讓我列出一些Bash不支持的結(jié)構(gòu),以及如何解決它們,這里有一個簡單的解決方法。
正則表達式有多種常用方言。Bash支持的是擴展正則表達式的變體。例如,這不同于許多在線正則表達式測試器支持的功能,后者通常是更現(xiàn)代的Perl 5 / PCRE變體。
擊不支持
\d\D\s\S\w\W-這些可以與POSIX字符類等同替換[[:digit:]],[^[:digit:]],[[:space:]],[^[:space:]],[_[:alnum:]],和[^_[:alnum:]],分別。(請注意最后一種情況,其中[:alnum:]POSIX字符類使用下劃線增強,以完全等同于Perl的\w速記形式。)Bash不支持非貪婪匹配。有時您可以
a.*?b用類似的東西代替,a[^ab]*b以在實踐中獲得類似的效果,盡管兩者并不完全相同。Bash不支持非括號
(?:...)。在平凡的情況下,只需使用捕獲括號即可(...);當然,如果您使用捕獲組和/或反向引用,則會重新編號捕獲組。擊不支持lookarounds像
(?<=before)或者(?!after),事實上任何與(?是一個Perl擴展。盡管您經(jīng)??梢詫栴}改寫為可以避免環(huán)顧的問題,但沒有簡單的常規(guī)解決方法。
TA貢獻1890條經(jīng)驗 獲得超9個贊
從 man bash
可以使用附加的二進制運算符=?,其優(yōu)先級與==和!=相同。使用它時,運算符右邊的字符串將被視為 擴展的正則表達式并進行相應(yīng)的匹配(如regex(3)中一樣)。
ERE不支持先行/后退。但是,您的代碼((?!Disk))中有它們。
這就是為什么您的正則表達式不符合您預期的原因。
- 3 回答
- 0 關(guān)注
- 528 瀏覽
添加回答
舉報
