在VS2008中要使用Boost.Regex正則表達式庫,首先須要在編譯器中添加Boost的lib目錄,不然編譯將會出現以下錯誤提示: 1>------ 已啓動生成: 項目: vs08, 配置: Debug Win32 ------ 1>正在編譯... 1>vs08.cpp 1>正在連接... 1>LINK : fatal error LNK1104: 沒法打開文件「libboost_regex-vc90-mt-sgd-1_44.lib」 1>生成日誌保存在「file://e:\Do\vs08\vs08\Debug\BuildLog.htm」 1>vs08 - 1 個錯誤,0 個警告 ========== 生成: 成功 0 個,失敗 1 個,最新 1 個,跳過 0 個 ========== 添加lib的方法: 方法1:依次點擊「項目——配置屬性——連接器——常規」,在「附加庫目錄」中加入lib所在目錄。例如,個人機子上是:"C:\Program Files\boost\boost_1_44\lib"。 方法2:將libboost_regex-vc90-mt-sgd-1_44.lib複製到工程目錄下,而後在代碼中添加以下聲明: #pragma comment(lib,"libboost_regex-vc90-mt-sgd-1_44.lib") Boost C++的正則表達式庫Boost.Regex能夠應用正則表達式於C++。正則表達式大大減輕了搜索特定模式字符串的負擔,在不少語言中都是強大的功能。雖然如今C++仍然須要以Boost C++庫的形式提供這一功能,可是在未來正則表達式將進入C++標準庫。Boost.Regex庫有望包括在下一版的C++標準中。 Boost.Regex庫中兩個最重要的類是boost::regex和boost::smatch,它們都在boost/regex.hpp文件中定義。前者用於定義一個正則表達式,然後者能夠保存搜索結果。 三個搜索正則表達式的函數 (1) 函數boost::regex_match() 用於字符串與正則表達式的比較。在整個字符串匹配正則表達式時其返回值爲true。 (2) 函數boost::regex_search() 用於在字符串中搜索正則表達式。 注意: [1] 函數boost::regex_search()能夠接受一個類型爲boost::smatch的引用的參數用於存儲結果。函數boost::regex_search()只用於分類的搜索。存儲結果的類boost::smatch事實上是持有類型爲boost::sub_match的元素的容器,能夠經過與類std::vector類似的界面訪問。例如,元素能夠經過操做符operator[]()訪問。 [2] 另外一方面,類boost::sub_match將迭代器保存在對應於正則表達式分組的位置。由於它繼承自類std::pair,迭代器引用的子串可使用first和second訪問。 [3] 請注意結果保存在迭代器中而boost::sub_match類並不複製它們,這說明它們只是在被迭代器引用的相關字符串存在時才能夠訪問。 [4] 還須要注意容器boost::smatch的第一個元素存儲的引用是指向匹配正則表達式的整個字符串的,匹配第一組的第一個子串由索引1訪問。 (3) 函數boost::regex_replace() 須要一個格式參數,它決定了子串、匹配正則表達式的分組如何被替換。若是正則表達式不包含任何分組,相關子串將被用給定的格式一個個地被替換。 注意 :對於正則表達式和格式有不一樣的標準。以上3個函數均可以接受一個額外的參數,用於選擇具體的標準。也能夠指定是否以某一具體格式解釋特殊字符或者替代匹配正則表達式的整個字符串。 |