#include <iostream>
#include <regex>
#include <tchar.h> //_T
using namespace std;
int main()
{
/*string s0 = "学正楼";
cout << s0[0] ;
cout << s0[1] << endl;
*/
//wcout.imbue(locale("chs", locale::ctype)); //据说有平台问题
//wstring s1 = L"学正楼";
//wcout << s1[0];
std::locale loc("");
std::wcout.imbue(loc);
std::wstring text(L"我的IP地址是:109.168.0.1.");
std::wstring newIP(L"127.0.0.1");
std::wstring regString(L"(\d+)\.(\d+)\.(\d+)\.(\d+)");
// 表达式选项 - 忽略大小写
std::regex_constants::syntax_option_type fl = std::regex_constants::icase;
// 编译一个正则表达式语句
std::wregex regExpress(regString, fl);
// 保存查找的结果
std::wsmatch ms;
// 判断是否全行匹配
if (std::regex_match(text, ms, regExpress))
{
std::wcout << L"正则表达式:" << regString << L"匹配:" << text << L"成功." << std::endl;
}
else
{
std::wcout << L"正则表达式:" << regString << L"匹配:" << text << L"失败." << std::endl;
}
// 查找
if (std::regex_search(text, ms, regExpress))
{
std::wcout << L"正则表达式:" << regString << L"查找:" << text << L"成功." << std::endl;
for (size_t i = 0; i < ms.size(); ++i)
{
std::wcout << L"第" << i << L"个结果:"" << ms.str(i) << L"" - ";
std::wcout <<L"起始位置:" << ms.position(i) << L"长度" << ms.length(i) << std::endl;
}
std::wcout << std::endl;
// 替换1
text = text.replace(ms[0].first, ms[0].second, newIP);
std::wcout << L"替换1后的文本:" << text << std::endl;
}
else
{
std::wcout << L"正则表达式:" << regString << L"查找:" << text << L"失败." << std::endl;
}
// 替换2
newIP = L"255.255.0.0";
std::wstring newText = std::regex_replace(text, regExpress, newIP);
std::wcout << L"替换2后的文本:" << newText << std::endl;
// 结束
std::wcout << L"按回车键结束...";
std::wcin.get();
return 0;
getchar();
return 0;
}
#include <regex>
#include <tchar.h> //_T
using namespace std;
int main()
{
/*string s0 = "学正楼";
cout << s0[0] ;
cout << s0[1] << endl;
*/
//wcout.imbue(locale("chs", locale::ctype)); //据说有平台问题
//wstring s1 = L"学正楼";
//wcout << s1[0];
std::locale loc("");
std::wcout.imbue(loc);
std::wstring text(L"我的IP地址是:109.168.0.1.");
std::wstring newIP(L"127.0.0.1");
std::wstring regString(L"(\d+)\.(\d+)\.(\d+)\.(\d+)");
// 表达式选项 - 忽略大小写
std::regex_constants::syntax_option_type fl = std::regex_constants::icase;
// 编译一个正则表达式语句
std::wregex regExpress(regString, fl);
// 保存查找的结果
std::wsmatch ms;
// 判断是否全行匹配
if (std::regex_match(text, ms, regExpress))
{
std::wcout << L"正则表达式:" << regString << L"匹配:" << text << L"成功." << std::endl;
}
else
{
std::wcout << L"正则表达式:" << regString << L"匹配:" << text << L"失败." << std::endl;
}
// 查找
if (std::regex_search(text, ms, regExpress))
{
std::wcout << L"正则表达式:" << regString << L"查找:" << text << L"成功." << std::endl;
for (size_t i = 0; i < ms.size(); ++i)
{
std::wcout << L"第" << i << L"个结果:"" << ms.str(i) << L"" - ";
std::wcout <<L"起始位置:" << ms.position(i) << L"长度" << ms.length(i) << std::endl;
}
std::wcout << std::endl;
// 替换1
text = text.replace(ms[0].first, ms[0].second, newIP);
std::wcout << L"替换1后的文本:" << text << std::endl;
}
else
{
std::wcout << L"正则表达式:" << regString << L"查找:" << text << L"失败." << std::endl;
}
// 替换2
newIP = L"255.255.0.0";
std::wstring newText = std::regex_replace(text, regExpress, newIP);
std::wcout << L"替换2后的文本:" << newText << std::endl;
// 结束
std::wcout << L"按回车键结束...";
std::wcin.get();
return 0;
getchar();
return 0;
}