使用regular expression來match中括號(square bracket)

沒想到在C#中也算玩過一陣子的正規表示式(Regular Expression),來到了Linux C/C++中竟然時常碰壁。

現在只是想要找一個用中括號([])包起來的字串,竟然沒有想的那麼簡單。

假設我要找的目標為 [1234],在以前C#的時候的寫法會是\[(?<num>(\d*)\]。來到了Linux C/C++時,也是用原本的概念組了一串這樣的比對格式:

\[([0-9]*\]

沒想到一使用std::regex_match()後就掛了。在編譯(或說指定)這個比對格式給std::regex時就出現Exception了。

這個問題查了一些google上的文章,大家都說遇到正規表示中有的字元的話就是前面加上跳脫字元\就可以啦。沒想到結果會是失敗。

後來看到有人指示要比對中括號的話,需要將它放在中括號中!!

就是用這樣的方式:

[\[]([0-9]*)[\]]

指定要比對於中括號中給定的字元,也就是中括號的左右兩邊的符號。

最後終於是正常編譯過關,且可以正常比對成功了。

而且要注意的是,當將上面這段比對格式放到C/C++的程式碼中,針對\不用再重覆一次,也就是不要寫成

"[\\[]([0-9]*)[\\]]"

這樣比對的結果也是失敗的喔。

留言

這個網誌中的熱門文章

DOS Batch指令檔中如何記錄log資訊

用捷徑方式執行需帶入命令列參數的Windows Form程式