c++ 正则表达式

正则表达式使用规则:

       *在c++z中使用转义符号都要双写不管是w,还是普通的符号,例如\w,\.

  1.单个内容的匹配符号:

    . :是针对除了换行符以外的任意一个字符.

    w:字母(大小写),数字,下划线(W是除了w之外的符号)

    d:数字(D是非数字)

    s:空白符(空格,制表,换行)(大写同上)

    :声明一个边界

    [ ]:匹配指定字符(例如:[a-zA-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,这里的+代表一直找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;
}
原文地址:https://www.cnblogs.com/yskn/p/9552530.html