C++中 regex 匹配中文字符一例

#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;
}
posted @ 2014-09-04 21:10  withChengChen  阅读(5416)  评论(0编辑  收藏  举报