正则表达式

     正则表达式被称为字符串处理的魔术师,对于复杂的字符串操作非常有用。由于标准c没有自带的正则库,因此在c平台下一般采用pcre库

以Imagemagick中提取Crop区域为例:

#include "pcre.h"

using namespace std;
#pragma comment(lib,"pcre.lib")
int main()
{
       pcre* re;
       cout<<"hello"<<endl;
       const char      *error;
       int             erroffset;
       int             ovector[100];
       int             rc, i;

char  src [] ="{/"v/":/"-1,2,0,0,0,0/",/"re/":[/"283,100,8,8/",/"351,106,7,7/"],/"s/":/"640/",/"cr/":[/"3:/":/"0,1,640,425/"]}"; 


 char cr_pattern[]=  "/"cr/"://[/"//d+://d+/":/"(//d+,){3}(//d+)/"//]";

 printf("String : %s/n", src);
 printf("Pattern: %s/n", v_pattern);


 re = pcre_compile(cr_pattern, 0, &error, &erroffset, NULL);
 if (re == NULL)

{
     printf("PCRE compilation failed at offset %d: %s/n", erroffset, error);
     return 1;
 }

 rc = pcre_exec(re, NULL, src, strlen(src), 0, 0, ovector, 100);       //ovecter中存储的是匹配的起始和结束的位置
 if (rc < 0)

 {
      if (rc == PCRE_ERROR_NOMATCH)

           printf("Sorry, no match .../n");
     else   

          printf("Matching error %d/n", rc);
     free(re);
     return 1;
 }

 printf("/nOK, has matched .../n/n");
 printf("%d/n",rc);
 for (i = 0; i < rc; i++)

 {
      char *substring_start = src + ovector[2*i];  
      int substring_length = ovector[2*i+1] - ovector[2*i];
      printf("%d,%d;%d,%d/n",ovector[0],ovector[1],ovector[2],ovector[3]);
      printf("%2d: %.*s/n", i, substring_length, substring_start);
 }

        free(re);
        return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值