linux c中libxml2 正则表达式 语法注意

      偶然的机会让我满足了linux c 中使用正则表达式的一个机会。程序设计的目的是生成一个so文件,能够对拔入的号码进行正则匹配,允许以133、153、189开头的号码进入呼叫队列。程序调用的是libxml2的库函数,相信用过的人不会陌生。程序大概是如下:
int  matchTel(char* str_reg,char* str_tel){
    regex_t preg;
    int i_errno;
    char str_error[128]={0};
    regmatch_t pm[1]={0};
    const size_t nmatch = 1;
    i_errno=regcomp(&preg,str_reg,0);
    if(i_errno!=0){//如果正则表达式不合法,返回
        return -1;
    }
    i_errno=regexec(&preg,str_tel,nmatch,pm,0);
    if(i_errno!=0){//正则表达式不匹配字符串,返回
        return 0;
    }else{//如果匹配,返回
       return 1;
    }
}
      一开始时传入str_reg="^1(33|53|89)",str_tel="13378977777"返回的是0,也就是regcomp编译正则表达式可以通过,但是不能匹配。后几经波折最后传入str_reg="^1//(33//|53//|89//)[0-9]{8}"才达到目的。
      我的理解是str_reg="^1(33|53|89)",如果没有转义,通过gcc,regcomp以后,还是普通的字符串"^1(33|53|89)"。如果"^1//(33//|53//|89//)[0-9]{8}"经过gcc转义后,为"^1/(33/|53/|89/)[0-9]{8}",再经过regcomp编译后"^1/(33/|53/|89/)[0-9]{8}",就达到预期的效果。在linux C中的对定义的正则表达式进行编译时必须要使用'(',')'等必须对其转义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值