跳转至

正则表达式

1 概述

  • 正则表达式
  • regexbasic_regex<char>的特化
  • wregexbasic_regex<wchar_t>的特化
  • 匹配一个结果
  • regex_match:完全匹配
  • regex_search:局部匹配
  • 匹配所有结果regex_iterator:迭代一个字符序列中的所有正则表达式匹配
  • cregex_iterator regex_iterator<const char*>
  • wcregex_iteratorregex_iterator`
  • sregex_iterator regex_iterator<std::string::const_iterator>
  • wsregex_iteratorregex_iterator`
  • 匹配结果
  • std::cmatchstd::match_results<const char*>
  • std::wcmatchstd::match_results<const wchar_t*>
  • std::smatchstd::match_results<std::string::const_iterator>
  • std::wsmatchstd::match_results<std::wstring::const_iterator>

2 regex

regex可以设置正则表达式,也可选设置匹配模式,如忽略大小写,多个模式用|分隔。 - 示例

std::regex r("[AWSD]\\d{2};",regex::icase|regex::egrep);

3 regex_match

regex_match要求完全匹配,与regex_search局部匹配不同。如一个正则regex r("[AWSD]\\d{2};")和一个待匹配数string str("12;A32;"),regex_match返回false,regex_search返回true。 - 示例代码

#include<regex>
#include<iostream>
using namespace std;
int main()
{
    std::regex r("[AWSD]\\d{2};");
    string str("12;A32;B45;WW200;S10;D100");
    smatch m;
    //方式1:如果不需要m,只需要知道是否匹配
    bool b = regex_match(str, r);
    //方式2
    regex_match(str, m, r);
    //方式3
    regex_match(str.cbegin(),str.cend(), m, r);
    //访问m中保存的匹配结果
    //方式1
    if (!m.empty())
        cout << m[0].str() << endl;
    //方式2
    for (auto pos = m.begin(); pos != m.end(); ++pos)
        cout << pos->str() << endl;
}

使用同regex_match

5 regex_iterator

#include<regex>
#include<iostream>
using namespace std;
int main()
{
    std::regex r("[AWSD]\\d{2};");
    string str("12;A32;B45;WW200;S10;D100");
    std::sregex_iterator pos(str.begin(), str.end(), r);
    std::sregex_iterator end;
    for (; pos != end; ++pos)
    {
        cout << pos->str() << endl;
    }
}