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