示例程序
运行界面:
输出:
(示例程序使用vs2013编写)
void CRegExTesstDlg::OnBnClickedButton1()
{
m_rslt = L""; // 为文本框IDC_EDIT1创建的变量
// 在stdafx.h中
// #include <string>
// #include <regex>
// 导入命名空间
using namespace std;
// 需要的信息
wstring srcstr = L"IPAddress: 192.168.1.1/255.255.255.0"; // 源字符串
wstring regstr = L"(\\d+).(\\d+).(\\d+).(\\d+)"; // 正则表达式
wregex reg1(regstr); // 构建正则表达式对象
// 方法1:使用regex_match进行匹配
m_rslt += L"使用regex_match匹配\r\n";
if (regex_match(L"10.0.0.25", reg1)) // bool regex_match(字符串,正则)
m_rslt += L"true\r\n";
else
m_rslt += L"false\r\n";
// 方法2:使用regex_search提取并读取子串
m_rslt += L"使用regex_search提取并匹配信息\r\n";
wsmatch mr; // 结果
wstring::const_iterator src_it = srcstr.begin(); // 获取起始位置
wstring::const_iterator src_end = srcstr.end(); // 获取结束位置
while (regex_search(src_it, src_end, mr, reg1)) { // bool regex_search(起始, 结束, &结果, 正则)
for (int i = 0; i < (int)mr.size(); ++i) {
// mr[i]返回wssub_match,其str()返回wstring,再c_str()返回wchar_t*
m_rslt += mr[i].str().c_str();
m_rslt += L"\r\n";
}
src_it = mr[0].second; // 迭代下一次搜索
}
// 方法3:使用wsregex_iterator搜索整个文本
m_rslt += L"使用regex_iterator搜索整个文本\r\n";
wsregex_iterator it(srcstr.begin(), srcstr.end(), reg1); // 正则迭代器(起始,结束,正则)
wsregex_iterator end; // 空迭代器,表示迭代结束
for (; it != end; ++it) { // 迭代直至结束
// tit->返回wsmatch,其str()返回wstring,再c_str()返回wchar_t*
m_rslt += *it->str().c_str();
m_rslt += L"\r\n";
}
// 方法4:使用wsregex_token_iterator提取子串
m_rslt += L"使用regex_token_iterator提取子串\r\n";
int submat[] = { 0, 1, 2, 3, 4 }; // 子串索引(0为匹配串,1+为子串)
// 正则token迭代器(起始,结束,正则,子项);
wsregex_token_iterator tit(srcstr.begin(), srcstr.end(), reg1, submat);
wsregex_token_iterator tend; // 空迭代器,表示迭代结束
for (; tit != tend; ++tit) { // 迭代直至结束
// it->返回wssub_match,其str()返回wstring,再c_str()返回wchar_t*
m_rslt += tit->str().c_str();
m_rslt += L"\r\n";
}
// 方法5:使用regex_search简单搜索
m_rslt += L"使用regex_search简单搜索\r\n";
regex_search(srcstr, mr, reg1); // bool regex_search(字符串, &结果, 正则)
if (mr.size() != 0)
m_rslt += L"mr.size() != 0\r\n";
else
m_rslt += L"mr.size() == 0\r\n";
// 方法6:使用regex_replace替换1
m_rslt += L"使用regex_replace替换1\r\n";
m_rslt +=
regex_replace(srcstr, reg1, L"$1.$2.x.$4") // wstring regex_replace(字符串, 正则, 表达式)
.c_str();
m_rslt += L"\r\n";
// 方法7:使用regex_replace替换2
m_rslt += L"使用regex_replace替换2\r\n";
wstring resultstr;
resultstr.resize(srcstr.size()); // 预留空间
regex_replace(resultstr.begin(), srcstr.begin(), srcstr.end(), // 使用输入和输出迭代器
reg1, L"$1.$2.x.$4",
regex_constants::format_first_only); // 只替换第一个
m_rslt += resultstr.c_str();
m_rslt += L"\r\n";
// 更新界面
UpdateData(false);
}</regex></string>
运行界面:
输出:
使用regex_match匹配
true
使用regex_search提取并匹配信息
192.168.1.1
192
168
1
1
255.255.255.0
255
255
255
0
使用regex_iterator搜索整个文本
1
2
使用regex_token_iterator提取子串
192.168.1.1
192
168
1
1
255.255.255.0
255
255
255
0
使用regex_search简单搜索
mr.size() != 0
使用regex_replace替换1
IPAddress: 192.168.x.1/255.255.x.0
使用regex_replace替换2
IPAddress: 192.168.x.1/255.255.255.0
(示例程序使用vs2013编写)