首页
社区
课程
招聘
[求助]PCRE正则库匹配Unicode中文
发表于: 2014-6-21 11:10 6003

[求助]PCRE正则库匹配Unicode中文

2014-6-21 11:10
6003
在网上找了很多都不行。求高手。PCRE正则库匹配Unicode中文

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2592
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
求高手。顶…………………………………………………………………………
2014-6-21 15:06
0
雪    币: 2592
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
news://www.baidu.com
http://hao123.com
ftp://yjip123.com
http://hjjk.cn
https://jdjldjl.gn.cn这是目标字符串用(((\\xn\\xe\\xw\\xs)|(\\xf\\xt\\xp)|(\\xh\\xt\\xt\\xp(\\xs)?))\\x:\\x/\\x/).*匹配。为什么只能匹配https和http,news和ftp都不能匹配这是为什么。这是在Unicode下面,不知道这样正则表达式正不正确。没在网上找到关系匹配Unicode编码下的字符串。(((\\xn\\xe\\xw\\xs)|(\\xf\\xt\\xp)|(\\xh\\xt\\xt\\xp(\\xs)?))\\x:\\x/\\x/).*
2014-6-23 19:30
0
雪    币: 2592
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
网上找到的可以用,找到很久才找到哎。
#include <..\pcre\include\pcre.h>  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    std::wstring sSrcReal = L"ahsf(agsh艾丝凡);asghjgah(ahsjhj);(&*(^&&*AS%Q(asg1asg); ajshfghasfg";  
    std::string sSrcRealUtf_8 = CW2A(sSrcReal.c_str(), CP_UTF8);  
  
     
    // 使用PCRE提取用户ID  
    std::string sRulesUtf_8 = CW2A(L"(?<=\\()[\\w\u4E00-\u9FFF]+(?=\\);)", CP_UTF8);  
  
    int nOptions = PCRE_EXTENDED | PCRE_UTF8;  
    const char *pError;  
    int nErroffset;  
  
    // 构造pcre结构  
    pcre *pRe = pcre_compile(  
        sRulesUtf_8.c_str(),  
        nOptions,  
        &pError,               /* for error message */  
        &nErroffset,           /* for error offset */  
        NULL);                /* use default character tables */  
  
    std::vector<std::wstring> sPcreOut;  
    int nPos = 0;  
    int nRet = 1;  
    while(pRe && nRet > 0)  
    {  
        int ovector[30];   // 必须为3的整数倍  
          memset(&ovector, -1, sizeof(ovector));  
      
        // 执行正则表达式匹配  
        nRet = pcre_exec(  
            pRe,                   /* the compiled pattern */  
            NULL,                 /* no extra data - we didn't study the pattern */  
            sSrcRealUtf_8.c_str(),//subject,              /* the subject string */  
            (int)sSrcRealUtf_8.size(),       /* the length of the subject */  
            nPos,                    /* start at offset 0 in the subject */  
            0,                    /* default options */  
            ovector,              /* output vector for substring information */  
            sizeof(ovector) / sizeof(ovector[0]));           /* number of elements in the output vector */  
  
        // ovector[0]存储匹配的首字符位置,ovector[1]存储匹配字符串后的第一个不匹配的字符位置  
        if(nRet > 0)  
        {  
            nPos = ovector[1];  
            std::string sSub = sSrcRealUtf_8.substr(ovector[0], nPos - ovector[0]);  
            std::wstring sTemp = CA2W(sSub.c_str(), CP_UTF8);  
            sPcreOut.push_back(sTemp);  
        }  
    }  
      
    return 0;  
}
2014-6-26 14:39
0
游客
登录 | 注册 方可回帖
返回
//