c++ 正則表達式


正則表達式使用規則:

       *在c++z中使用轉義符號都要雙寫不管是\w,還是普通的符號,例如\\w,\\.

  1.單個內容的匹配符號:

    . :是針對除了換行符以外的任意一個字符.

    \w:字母(大小寫),數字,下划線(\W是除了\w之外的符號)

    \d:數字(\D是非數字)

    \s:空白符(空格,制表,換行)(大寫同上)

    \b:聲明一個邊界

    [ ]:匹配指定字符(例如:[a-z\A-Z1-9]是匹配小寫字母大寫字母,"\"以及數字的一個字符)(匹配漢字的方法使用萬國碼[\u4e00-\u9fa5])

  2.匹配的字符個數:(用在單個限定樣式的字符后面)

    +:匹配一個或多個字符

    *:匹配零個或是多個字符

    ?:匹配零個或是一個字符

    { }:匹配指定次數(例如{1,3}字符重復一次或是3次,也可以{3}只重復3次)

  3.分組匹配

    我們只需要把我們所需要的分組加上括號,之后我們可以通過smatch變量尋找(  該變量的列表中第一個元素永遠是執行匹配操作的原始字符串,smatch mat,mat[1].str分組第一組  ).括號還有就是(jpg|bmp)的作用

正則表達式函數調用:

regex_match()對字符串進行匹配(一般不使用,因為字符串匹配的正則表達式要考慮到整個字符串)

使用regex_search()對字符串進行循環尋找:

正則表達式在對大量字符串的提取有效信息,所支持的頭文件#include <regex>

      regex_match:將一個字符序列與一個正則表達式匹配
      regex_search:尋找第一個與正則表達式匹配的子序列
      regex_replace:使用給定格式替換一個正則表達式
      sregex_iterator:迭代器適配器,調用regex_search來遍歷一個string中所有匹配的字串
 這里要注意的是\b這種在輸入時要變成\\b,這里的+代表一直找\d知道遇到 '.'(如果我們只想找n個數字只需要把+換{n}即可),{1}代表着上面的組只循環一次
循環搜索:
	string test = "145341.35186410.200034uhvsv nfji7676876///1324531.1";
	smatch mat;
	regex rgx("(\\d+\\.){1}");
	string::const_iterator start = test.begin();
	string::const_iterator end = test.end();
	
	while (regex_search(start, end, mat, rgx))
	{
		cout << mat[1].str() << endl;
		start = mat[0].second;
	}

 輸出結果:循環輸出 

下面是正則一些函數的使用方法:

int main(){

    //第一種存儲方式
    //match_results<string::const_iterator> result;
    //第二種存儲方式
    smatch result;

    //文本數據
    string str="1994 is my birth year 1994";
    //正則表達式
    string regex_str("\\d{4}");
    regex pattern1(regex_str,regex::icase);

    //迭代器聲明
    string::const_iterator iter = str.begin();
    string::const_iterator iterEnd= str.end();
    string temp;
    //正則查找
    while (std::regex_search(iter,iterEnd,result,pattern1))
    {
        temp=result[0];
        cout<<temp<<endl;
        iter = result[0].second; //更新搜索起始位置
    }

    //正則匹配
    string regex_str2("(\\d{4}).*");
    regex pattern2(regex_str2,regex::icase);

    if(regex_match(str,result,pattern2)){
        cout<<result[0]<<endl;
        cout<<result[1]<<endl;
    }
    
    //正則替換
    std::regex reg1("\\d{4}");
    string t("1993");
    str = regex_replace(str,reg1,t); //trim_left
    cout<<str<<endl;
        
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM