BOOST库学习之正则表达式
生活随笔
收集整理的這篇文章主要介紹了
BOOST库学习之正则表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
本次筆記記錄如下知識點
一、正則表達式的簡介
1、正則表達式的匹配規則
- 正則表達式定義了一套復雜的語法規則,用于匹配有特定模式的字符串。在正則表達式中,大部分字符都匹配自己(普通字符),只有少量的字符用于定義特殊匹配模式的語法,如下所示:
| $ | 匹配輸入字符串的結尾位置。要匹配 $ 字符本身,請使用 $。 |
| ( ) | 標記一個子表達式的開始和結束位置。子表達式可以獲取供以后使用。要匹配這些字符,請使用 ( 和 )。 |
| * | 匹配前面的子表達式零次或多次。要匹配 * 字符,請使用 *。 |
| + | 匹配前面的子表達式一次或多次。要匹配 + 字符,請使用 +。 |
| ( ) | 標記一個子表達式的開始和結束位置。子表達式可以獲取供以后使用。要匹配這些字符,請使用 ( 和 )。 |
| . | 匹配除換行符 \n 之外的任何單字符。要匹配 . ,請使用 . 。 |
| [ | 標記一個中括號表達式的開始。要匹配 [,請使用 [。 |
| ? | 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字符,請使用 ?。 |
| \ | 將下一個字符標記為或特殊字符、或原義字符、或向后引用、或八進制轉義符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配換行符。序列 ‘\’ 匹配 “”,而 ‘(’ 則匹配 “(”。 |
| ^ | 匹配輸入字符串的開始位置,除非在方括號表達式中使用,當該符號在方括號表達式中使用時,表示不接受該方括號表達式中的字符集合。要匹配 ^ 字符本身,請使用 ^。 |
| { | 標記限定符表達式的開始。要匹配 {,請使用 \{。 |
| | | 指明兩項之間的一個選擇。要匹配 |
2、正則表達式的類摘要
- basic_regex類的作用主要是對正則表達式解析和編譯,代碼如下:
- match_results類的作用主要是保存正則表達式匹配的結果,代碼如下:
- sub_match類是一個類似迭代器的對象,可以把它當做一個字符串的區間表示,代碼如下:
二、正則表達式的匹配
- 正則匹配是通過regex_match()用來檢查一個字符串是否匹配一個正則表達式,返回bool結果
- regex_match()函數的使用形式有如下兩種:
使用如下例子來演示正則匹配的使用方式
#include <iostream> #include <boost/xpressive/xpressive_dynamic.hpp> using namespace boost::xpressive; using namespace std;int main(int argc, char* argv[]) {//1、簡單的正則匹配//創建一個正則表達式對象cregex reg1 = cregex::compile("a.c");//判斷字符串是否匹配成功if (regex_match("abc", reg1)){cout << "匹配正確" << endl;}//驗證身份證cregex reg2 = cregex::compile("\\d{6}(1|2)\\d{3}(0|1)\\d[0-3]\\d\\d{3}(X|\\d)");if (regex_match("999555197601019999", reg2)){cout << "匹配正確" << endl;}//使用正則匹配獲取結果cregex reg3 = cregex::compile("\\d{6}((1|2)\\d{3})(0|1)(\\d[0-3]\\d)(\\d{3}(X|\\d))");cmatch what;regex_match("999555197601019999", what, reg3);//輸出匹配的結果for (auto& x :what){cout << "[" << x << "]" << endl;}return 0 ; }運行結果如下
三、正則表達式的查找
- 正則表達式的查找功能可以使用regex_search函數來進行,它的主要作用是檢測輸入的表達式中是否包含正則表達式,,即存在一個匹配正則表達式的子項。
- regex_search函數使用形式如下:
使用如下例子來演示regex_search的使用
#include <iostream> #include <boost/xpressive/xpressive_dynamic.hpp> using namespace boost::xpressive; using namespace std;int main(int argc, char* argv[]) {char str[] = "there is a power-suit item";cregex reg = cregex::compile("(power)-(.{4})");//判斷是否能搜索到字符串if (regex_search(str, reg)){cout << "成功搜索" << endl;}//使用cmatch保存搜索到的字符cmatch what;regex_search(str, what, reg);cout << what[0] <<" " << what[1] <<" " << what[2] <<endl;return 0 ; }運行結果如下
四、正則表達式的替換
- 替換功能采用的是regex_replace函數,它的作用是先以正則表達式查找匹配的字符串,再用指定的個事將其替換。
- regex_replace函數一個三個參數,前兩個與regex_search()相同,第三個參數是一個替換的字符串,可以用N引用正則表達式匹配的子表達式,用N引用正則表達式匹配的子表達式,用N引用正則表達式匹配的子表達式,用&引用全匹配。替換完成之后,返回字符串的拷貝,使用形式如下:
運行結果如下
五、正則表達式的迭代
- xpressive庫提供了一個強大的迭代器模板類regex_iterator,它的作用是可以遍歷正則表達式的匹配結果。
- regex_iterator的構造函數完成迭代初始化工作,要求傳入進行分析的容器區間和正則表達式對象,之后就可以對它反復調用operator++,使用"*“或”->"獲取匹配結果的match_result對象。
regex_iterator的使用示例如下
運行結果如下
總結
以上是生活随笔為你收集整理的BOOST库学习之正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清除上网记录的两种方法
- 下一篇: 今天开始做战斗,回合制战斗代码实现第四篇