PCRE函数在C语言中的使用小例子
在使用PCRE库时,首先肯定是需要安装pcre的,不过一般的系统都会有自带的PCRE库。不过如果想使用最新版本的话,也可以自已下载一个安装包。我这里下载的安装是pcre-8.13.tar.gz版本。安装过程很简单,把安装包上传需要安装的服务器上,安装时默认路径即可,我是在linux环境下安装的,执行命令如下:
1.[root@host70-151 pcre-8.13]# ./configure
2.[root@host70-151 pcre-8.13]# make && make install
此两步即可安装完成,安装成功后的头文件在:/usr/local/include, 库文件在:/usr/local/lib 。
下面是我的一个使用PCRE库函数的一个小例子,其功能是匹配手机号码的正则表达式是否成功,分成四类手机号码时行匹配,分别是移动、电信、联通和CDMA的手机号。里面用到了PCRE库函数中的pcre_compile()和pcre_exec():
因为我是在linux下编译C程序的,所以要用到makefile文件。注意:如果你在编译时出现提示:
/usr/zej/zej_test/kernel/pcre_test2.c:29: undefined reference to `pcre_compile' /usr/zej/zej_test/kernel/pcre_test2.c:35: undefined reference to `pcre_exec'
没有定义pcre.h文件里面的函数时,是因为没有链接到库文件里,这时可以能过修改makefile,在l里面添加一个lpcre即可。然后在编译便可成功。
#include
#define OVECCOUNT 30 /* should be a multiple of 3 */ #define EBUFLEN 128 #define BUFLEN 1024
int main()
{
pcre *reCM, *reUN, *reTC, *reCDMA; const char *error; int erroffset;
int ovector[OVECCOUNT];
int rcCM, rcUN, rcTC, rcCDMA, i; /*
常用号段前三位
中国移动:134.135.136.137.138.139.150.151.152.157.158.159.187.188 ,147(数据卡) 中国联通:130.131.132.155.156.185.186 中国电信:133.153.180.189
CDMA :133,153 */
char src[22];
char pattern_CM[] = \ char pattern_UN[] = \ char pattern_TC[] = \ char pattern_CDMA[] = \
printf(\ scanf(\
printf(\
printf(\ printf(\ printf(\
printf(\
reCM = pcre_compile(pattern_CM, 0, &error, &erroffset, NULL); //将正则表达式编译成pcre内部表示结构
reUN = pcre_compile(pattern_UN, 0, &error, &erroffset, NULL); reTC = pcre_compile(pattern_TC, 0, &error, &erroffset, NULL);
reCDMA = pcre_compile(pattern_CDMA, 0, &error, &erroffset, NULL);
if (reCM==NULL && reUN==NULL && reTC==NULL && reCDMA==NULL) { printf(\compilation telephone failed at offset %d: %s\\n\erroffset, error);
return 1; }
rcCM = pcre_exec(reCM, NULL, src, strlen(src), 0, 0, ovector, OVECCOUNT); //匹配pcre编译好的模式,成功返回正数,失败返回负数
rcUN = pcre_exec(reUN, NULL, src, strlen(src), 0, 0, ovector, OVECCOUNT); rcTC = pcre_exec(reTC, NULL, src, strlen(src), 0, 0, ovector, OVECCOUNT);
rcCDMA = pcre_exec(reCDMA, NULL, src, strlen(src), 0, 0, ovector, OVECCOUNT);
if (rcCM<0 && rcUN<0 && rcTC<0 && rcCDMA<0) { //若没匹配返回错误信息
if (rcCM==PCRE_ERROR_NOMATCH && rcUN==PCRE_ERROR_NOMATCH &&
rcTC==PCRE_ERROR_NOMATCH && rcTC==PCRE_ERROR_NOMATCH) {
printf(\ } else {
printf(\ printf(\ printf(\ printf(\ } free(reCM); free(reUN); free(reTC);
free(reCDMA); return 1; }
printf(\ if (rcCM > 0) {
printf(\ printf(\ }
if (rcUN > 0) {
printf(\ printf(\ }
if (rcTC > 0) {
printf(\ printf(\ }
if (rcCDMA > 0) {
printf(\ printf(\ }
free(reCM); //释放内存 free(reUN); free(reTC);
free(reCDMA); return 0; }
下面是编译通过后,运行程序后的结果:
按照提示输入手机号:13591995735(移动手机号)
随便输入一个号码:7459812
输入联通手机号码:13006666039
输入电信手机号码:18900000036
[1]:一些正则表达库的对比
http://www.regular-expressions.info/refflavors.html [2]:Boost和PCRE正则库的性能对比
http://www.boost.org/doc/libs/1_40_0/libs/regex/doc/gcc-performance.html [3]:正则表达式语言元素
http://msdn.microsoft.com/zh-cn/library/az24scfc.aspx
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PCRE函数在C语言中的使用小例子在线全文阅读。
相关推荐: