Regex++使用方法

Regex++是一套完全以C++寫成的regex lib,支援VC、BCB、GCC等等C++ compiler,由於使用template的方式設計, 於是不但可以用在std::string上,char*、甚至是stlport特有的rope都沒問題

regex++使用步驟:

  1. 先至 http://sourceforge.net/projects/boost/files/ 下載boost1.40.0的檔案
    (不要下載最新的1.41.0,因為我試用時他有些檔案沒更新到,會找不到某些檔案)
    也可直接用這個連結下載 http://sourceforge.net/projects/boost/files/boost/1.40.0/boost_1_40_0.zip/download

  2. 解壓縮後到 boost_1_40_0\libs\regex\build 資料夾,依照要用的compiler編譯
    例如如果是vc9
    先打 nmake -fvc9.mak
    再打 nmake -fvc9.mak install
    即可把相關的lib檔和dll檔copy至vc9的資料夾

  3. 使用時先在檔案裡加入 #include
    compile時再加入boost的主資料夾連結即可
    例如要在windows上compile
    就打 cl testregex.cpp -I.\boost_1_40_0 /EHsc /O2 /nologo
    即可使用

常用的regex pattern如下
\ 標示下一個字元為特殊字元或文字
^ 對應輸入的開頭
$ 對應輸入的結尾
* 對應前面的字元 0 次或更多次
+ 對應前面的字元一次或更多次
? 對應前面的字元 0 次或一次
. 對應換行字元以外的任何單一字元。
(pattern) 比對模式並記錄符合的項目。對應的子字串可透過「項目」[0]...[n],從結果的 Matches 集合中擷取。若要對應括弧字元 (),請使用 \( 或 \)。
x|y 對應 x 或 y
{n} n 是一個正整數,必須完全對應 n 次
{n,} n 是一個正整數,至少應對應 n 次
{n,m} m 和 n 都是正整數,至少應對應 n 次,最多 m 次
[xyz] 這是一個字元集,可對應任何一個括住的字元
[^xyz] 這是一個負的字元集,對應任何未括住的字元
[a-z] 這是一個字元範圍,對應指定範圍內的任何字元
[^m-z] 這是一個負的字元範圍,對應指定範圍外的任何字元
\b 對應一個文字界緣 (word boundary),也就是文字和空格之間的位置。
\B 對應一個非文字界緣。ea*r\B 可對應 never early 中的 ear。
\d 對應數字字元,相當於 [0-9]。
\D 對應非數字字元,相當於 [^0-9]。
\f 對應一個換頁字元。
\n 對應一個換行字元。
\r 對應一個復位字元。
\s 對應任何空白,包括空格、定位 (tab) 和換頁等等,相當於 [ \f\n\r\t\v]。
\S 對應任何非空白字元,相當於 [^ \f\n\r\t\v]。
\t 對應一個定位字元。
\v 對應一個垂直定位字元。
\w 對應包括底線在內的任何文字字元,相當於 [A-Za-z0-9_]。
\W 對應任何非文字字元,相當於 [^A-Za-z0-9_]。
\num 對應 num,此處的 num 是一個正整數。它是一個回到記憶符合項目的參考。例如,(.)\1 可對應兩個連續的相同字元。
\n 對應 n,此處的 n 是一個八進位的 escape 值。八進位的 escape 值必須等於 1、2 或 3 個數字的長度。例如 \11 和 \011 都可對應一個定位字元。\0011 相當於 \001 與 1。八進位的 escape 值不得超過 256,否則運算式只會使用前兩個數字。這個字元可讓通用運算式能使用 ASCII 程式碼。
\xn 對應 n,此處的 n 是一個十六進位的 escape 值。十六進位的 escape 值必須正好等於 2 個數字的長度。例如 \x41 可對應 A。\x041 相當於 \x04 與 1。這個字元可讓通用運算式能使用 ASCII 程式碼。

範例:testregex.cpp