首頁  >  問答  >  主體

c++ - C语言 正则表达式结果不对?

在linux平台下,使用c++11正则表达式错误。。

bool isPattern(string str,string pattern)
{
     bool tag=false;
    if(str.size() > 0 && pattern.size() >0)
    {
        string match;
        regex_t reg;
        char errbuf[1024];
        char *buff=new char[str.size()];
        int err=0;
        int nm=1024;
        memcpy(buff,str.c_str(),str.size());
        regmatch_t pmatch[nm];
        if(regcomp(&reg,pattern.c_str(),REG_NEWLINE|REG_EXTENDED) < 0){
        regerror(err,&reg,errbuf,sizeof(errbuf));
        cout<<errbuf<<endl;
        }
    err=regexec(&reg,buff,nm,pmatch,0);
    if(err==REG_NOMATCH) {
        cout<<"no match"<<endl;
    }
     else if(err)
    {
        regerror(err,&reg,errbuf,sizeof(errbuf));
        cout<<errbuf<<endl;

    }
    else
    {
        int len=0;
        for(int i=0;i<nm && pmatch[i].rm_so!=-1;++i)
        {
            len=pmatch[i].rm_eo-pmatch[i].rm_so;
            if(len > 0)
            {
                match.clear();
                match.assign(buff+pmatch[i].rm_so,len);
                cout<<"匹配结果:"<<match<<endl;
                tag=true;
        //      match.clear();
            }
        }
        regfree(&reg);

     }
    delete [] buff;
  }
    return tag;
}
                            

原始字符串
string str="huangyong"urlname:" "三明治"h good way "urlname:" "蔬菜"h hello world "urlname:"h "apple", wiofjofiewajoi";
正则表达式
string pattern=""urlname:".*?"";
程序运行结束后,输出的结果是:匹配结果:"urlname:" "三明治"h good way "urlname:" "蔬菜"h hello world "urlname:"h "apple"
这个正则表达式通过在线测试工具是正确的,但是输出的结果却不是想要的。
各位大神,求助啊。。

大家讲道理大家讲道理2764 天前564

全部回覆(4)我來回復

  • 黄舟

    黄舟2017-04-17 13:51:39

    ~~ 好吧,眾審真是扯淡的功能。
    使用正規表示式最好使用c++11提供的raw string去除轉義字元的干擾。
    還有題目的標籤是非常重要的,不要亂貼。 。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:51:39

    1, C語言沒有string型, 更不會有.呼叫方法

    2, 你那字串, 無論是正規字符串還是匹配字符串請寫好呀, 想幫你, 也不明白你想做什麼, "亂飛

    3, 可以的話, 程式碼中要寫註解, 會正則跟會C語言的正則是兩回事, 雖然我也會C

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:51:39

    呵呵

    opkj;kl;

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:51:39

    感謝各位大牛們的指導,已找到錯誤的原因,是因為寫的正則表達式,在這個正則表達式處理函數中存在問題,這個正則處理函數也存在一些問題。

    回覆
    0
  • 取消回覆