在vc中使用PCRE

在vc中使用PCRE

在vc中使用PCRE
1 . PCRE简介
正则表达式(regular expression),通常简写为regex、regexp或RE,使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
PCRE(Perl Compatible Regular Expressions),是一个函数库,由Philip Hazel开发,该函数库使用与Perl5一样的语法和语义实现了正则表达式的模式匹配功能。PCRE是免费开源的,它是由C语言实现。很多著名的开源软件如Apache、PHP、KDE、Nginx 等都使用了PCRE。官方主页–http:
// www.pcre.org,目前(2016.03)最新版本是8.38。

2  编译 PCRE
PCRE的作者Philip Hazel是在linux上工作的,所以编译PCRE最好的办法自然是configure, make, make install三步曲了。在windows下, cygwin或者MinGW都支持这么做。
在windows下编译 PCRE要用CMake。
先从 http:
// www.cmake.org 上下载最新版的CMake,
在解压缩后的PCRE目录下建个子目录build,比如我的D:\pcre - 8.38 \build。
设置要编译的源代码的路径以及编译好的二进制文件存放的路径
CMake 会读取源代码目录下的文件 CMakeLists.txt ,然后将读到的配置以红颜色显示出来,此时可以根据我们的需要适当的选择或去掉一些配置,比如加上 PCRE_SUPPORT_UTF,去掉PCRE_SUPPORT_JIT(不需要嵌入式的代码)、PCRE_BUILD_PCRECPP(我只想要c形式的库);还可以修改一些配置的值,比如把PCRE_NEWLINE从LF改成CRLF。然后再点一下
" Configure”,最后点 " Generate”,你会发现在build目录里生成了一系列的vc6的工程文件以及一些.h文件和.c文件。

3  在工程中使用PCRE
包含头文件 #include “pcre.h”
链接静态库 #pragma comment(lib,“pcre.lib”)
在项目”预处理器定义“中加上PCRE_STATIC

示例代码:
#include 
" stdafx.h "
#define  PCRE_STATIC
#include 
" pcrecpp.h "
#include 
< vector >
#include 
< iostream >
#include 
< string >
#pragma comment(lib,
" lib/pcrecppd.lib " )
#pragma comment(lib,
" lib/pcred.lib " )
using   namespace  std;
using   namespace  pcrecpp;

int  Test1()
{
    
#define  OVECCOUNT 30    /* should be a multiple of 3 */
    pcre            
* re; 
    
const   char        * error;
    
int              erroffset;
    
int              ovector[OVECCOUNT];
    
int              rc, i;

    
char             src    []  =   " 111 <title>Hello World</title> 222 " ;
    
char             pattern   []  =   " <title>(.*)</title> " ;

    printf(
" String : %s\n " , src);
    printf(
" Pattern: \ " % s\ " \n " , pattern);


    re 
=  pcre_compile(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, OVECCOUNT);
    
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 " );

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

    free(re);
    
return   0
}


int  main()  
{  
    Test1();
    
return   0 ;
}  


你可能感兴趣的:(在vc中使用PCRE)