您好,匿名用户
随意问技术百科期待您的加入

c++标准库中没有关于正则匹配字符串的函数么?

0 投票

我想实现的是查找满足正则条件的字符串,google了一下,发现都是用的boost中的函数,难道标准库中没有相关函数么?

用户头像 提问 2012年 12月1日 @ Skarner 上等兵 (193 威望)
分享到:

1个回答

0 投票

在Linux下你可以很方便的使用regex.h提供的库。我先贴一段代码展示一下RE在C语言里是怎么用的
,比较粗略点

#include<stdio.h>
#include<sys/types.h>
#include<regex.h>
#include<memory.h>
#include<stdlib.h>

int main()
{
 
    char *bematch = "hhhericchd@gmail.com";
    char *pattern = "h{3,10}(.*)@.{5}.(.*)";
    char errbuf[1024];
    char match[100];
    
    regex_t reg;
    int err,nm = 10;
    regmatch_t pmatch[nm];
 
    if(regcomp(&reg,pattern,REG_EXTENDED) < 0){
        regerror(err,&reg,errbuf,sizeof(errbuf));
        printf("err:%s\n",errbuf);
    }
 
    err = regexec(&reg,bematch,nm,pmatch,0);
    if(err == REG_NOMATCH){
        printf("no match\n");
        exit(-1);
    }else if(err){
        regerror(err,&reg,errbuf,sizeof(errbuf));
        printf("err:%s\n",errbuf);
        exit(-1);
    }
 
    for(int i=0;i<10 && pmatch[i].rm_so!=-1;i++){
        int len = pmatch[i].rm_eo-pmatch[i].rm_so;
        if(len){
            memset(match,'\0',sizeof(match));
            memcpy(match,bematch+pmatch[i].rm_so,len);
            printf("%s\n",match);
        }
    }
  
    return 0;
}

我打算看看一个邮件地址是否匹配我所提供的pattern。这个邮件地址是
hhhericchd@gmail.com patern为

"h{3,10}(.*)@.{5}.(.*)"
用户头像 回复 2012年 12月1日 @ Tristana 上等兵 (285 威望)
提一个问题:

相关问题

0 投票
1 回复 40 阅读
用户头像 提问 2012年 12月1日 @ Ashe 上等兵 (336 威望)
0 投票
1 回复 25 阅读
用户头像 提问 2012年 12月1日 @ Dr. Mundo 上等兵 (281 威望)
0 投票
1 回复 44 阅读
0 投票
1 回复 21 阅读
用户头像 提问 2012年 12月1日 @ Virgo 上等兵 (284 威望)
0 投票
1 回复 30 阅读
用户头像 提问 2012年 12月1日 @ Fizz 上等兵 (325 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...