2012-09-14 52 views
4

[[]]在正則表達式中的含義是什麼?「[[]]」在正則表達式中的含義是什麼?

$ echo '[][]' | grep -oE '[[]]' 
[] 
[] 
$ grep --version 
grep (GNU grep) 2.10 

嗯,它看起來它匹配[]。 (字符序列[],而不是[]。) (我用python的re模塊測試過,結果相同。) 真的嗎? 如果是這樣,爲什麼?

我知道如果我想匹配[],我應該寫[][][[\]]。 (他們在PCRE中工作,grep支持[][],但不是[[\]],因爲\在grep的括號表達式中失去了特殊含義。) 我只是感覺好奇。

+0

看起來我誤解了你的問題。 – BoltClock

+0

@BoltClock我已經編輯了一下我的問題。 (指出'[]'是一個序列)我希望現在看起來更清楚。) – weakish

回答

4

表達式[[]]實際上由兩個級聯的子表達式組成:[[]]

  • [[]是隻匹配[個字符的字符類。有[只能在角色類的開頭。
  • ]只是在字符類以外的普通字符。

兩者被連接起來從而您的表達式匹配接着][任何字符,這導致匹配[]

+0

如果你想嘗試更多類似的東西,試試像'[[] x'或'] [[]''這樣的表達式: ) – Michael

+0

在JAVA中,''foo [bar「.matches(」[[]]「);'拋出'PatternSyntaxException':*未綁定的字符類在索引3 *附近,因爲您需要轉義內部括號:''[[ \\ [\\]]「'。 – sp00m

+0

@ sp00m感謝您指出這一點。在某些語言中,'[[]'只是非法的。 – weakish

相關問題