深入浅出C/C++中的正则表达式库(二)——Boost.Regex
寫在前面:本文是《深入淺出C/C++中的正則表達式庫》系列的第二篇,如果對本文感興趣,相信你也會對《深入淺出C/C++中的正則表達式庫——GNU Regex Library》感興趣。本文主要介紹Boost中的正則表達式庫,通過介紹其基本內容與相關接口,希望能夠教讀者朋友學會如何使用該庫。
1. 什么是Boost.Regex??
Boost是C++中僅次于STL的一套庫,它的功能比STL更加全面。這里是Boost的主頁,想了解Boost的朋友可以看一下:http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/index.html。需要說明的一點是,Boost目前還不是C++標準庫的一部分,因此如果要使用Boost中的庫,需要自己安裝一下。
Boost.Regex是Boost中的正則表達式庫,它是由John Maddock提供的,它的全部文檔在這里:http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/index.html
2. Boost.Regex的編譯
最新的Boost庫是1.42.0,在使用Boost.Regex之前,需要先下載Boost庫,可以通過下面兩種方式下載:
(1)Http下載,下載地址是http://sourceforge.net/projects/boost/files/boost/1.42.0/
(2)用svn客戶端來下載,地址是:http://svn.boost.org/svn/boost/trunk/
我個人比較推薦使用svn客戶端來下載,這樣的話,如果要更新直接svn update一下,就不用再去重新下載了。
下載好了Boost庫,下面開始編譯, 本文中我以Linux平臺為例進行說明,其它平臺的編譯方法參見上面提到的文檔。下面是具體的步驟:(假設下載完后的,代碼解壓在了BOOST_ROOT目錄)
(1)進入到BOOST_ROOT/libs/regex/build目錄
(2)如果要使用靜態庫,請執行make -fgcc.mak
(3)如果要使用靜態庫,請執行make -fgcc-shared.mak
執行完上面三步后的,在BOOST_ROOT/libs/regex/build/下會生成一個gcc目錄 ,進入該目錄 ,可以看到生成了下面四個文件:
(1)libboost_regex-gcc-1_42.a , 這是release版的靜態庫
(2)libboost_regex-gcc-1_42.so, 這是release版的動態庫(共享庫)
(3)libboost_regex-gcc-d-1_42.a, 這是debug版的靜態庫
(4)libboost_regex-gcc-d-1_42.so, 這里debug版的動態庫(共享庫)
編譯好之后的,就可以開始使用了。這里提供一個我編譯好的版本,如果讀者朋友不想自己編譯,可以直接從我這里下載使用,下載完記得校驗一下MD5: b6e0d805ea22ba08cb230ca98a517953。
點此下載:libboost_regex.tar.gz。
3. Boost Regex Libray類和接口介紹
(1)basic_regex
basic_regex是一個模板類,它封裝了正則表達式的解析和編譯,它是Boost.Regex中用來表示正則表達式的對象類型。Boost.Regex定義了兩種標準類型,一種是基于單字節字符的regex,另一種是基于寬字符的wregex
關于basic_regex提供的接口,和STL中basic_string所提供的十分類似,具體可以參考:
http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/boost_regex/ref/basic_regex.html
(2)match_results
match_results是用來表示所有匹配指定正則表達式的字符串的集合的對象類型。Boost.Regex提供了四種標準類型的定義:C單字節字符 類型的cmatch, C寬字符類型的wcmatch, C++單字節字符類型smatch, C++寬字符類型wsmatch。match_results所提供的接口參見:
http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/boost_regex/ref/match_results.html
(3)sub_match
sub_match是用來表示匹配指定正則表達式的字符串的對象類型。match_results就是由sub_match組成的集合類型。
關于sub_match類型,有下面三點需要注意的:
a. sub_match類型的對象只能通過對match_results類型的對象取下標獲取
b. sub_match類型的對象可以和std:basic_string或const char*的字符串進行比較
c. sub_match類型的對象可以和std::basic_string或const char*的字符串相加,生成新的std::basic_string類型的字符串
sub_match所提供的接口請參考:
http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/boost_regex/ref/sub_match.html
(4)reg_match, reg_search和reg_replace
reg_match, reg_search和reg_replace都是Boost.Regex所提供的具體進行正則匹配的算法接口。
reg_match用來判定整個字符串是否匹配指定的的正則表達式, 具體定義參見:
http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/boost_regex/ref/regex_match.html
reg_search用來判定字符串的某一部分是否匹配指定的正則表達式, 具體定義參見:
http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/boost_regex/ref/regex_search.html
reg_replace用來把字符串中匹配指定正則表達式的部分替換為指定內容輸出,對于不匹配的部分原樣輸出, 具體定義參見:
http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/html/boost_regex/ref/regex_replace.html
4. Boost Regex Libray使用注意事項
(1)在使用之前你需要把Boost的安裝目錄加入到系統的Path中(當然也可以在編譯時直接指定)
(2)需要包含的頭文件 boost/regex.hpp
(3)需要依賴的庫:下載2中編譯好的libboost.tar.gz,取其中任意一個即可,具體如何使用動態/靜態庫,請自己查閱相關資料
(4)Boost.Regex還提供對Unicode類型的支持,具體細節參加上面提到的文檔,我這里不做介紹
5. Boost.Regex使用舉例
下面是Boost.Regex使用的一個簡單的例子:
運行結果:
以上即是Boost.Regex的主要的內容以及具體使用的一些情況。這里我需要說明一下,由于Boost.Regex所提供的像 basic_regex, match_results, sub_match這些類型,它們的封裝與C++中string等其它stl容器的封裝很相似,因此使用過程中可以做聯想類比,以加深理解。另外,像 regex_match, regex_search, regex_replace這些算法都是模板函數,而且都有多個重載版本,在使用的時候,注意選擇適合自己的應用場景的版本。
本文轉自nxlhero 51CTO博客,原文鏈接:http://blog.51cto.com/nxlhero/887155,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的深入浅出C/C++中的正则表达式库(二)——Boost.Regex的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机端公告文本回滚(简单的jq代码)
- 下一篇: 深入谈一谈iOS模块独立运行