77范文网 - 专业文章范例文档资料分享平台

PCRE函数在C语言中的使用小例子

来源:网络收集 时间:2020-04-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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 #include #include #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语言中的使用小例子在线全文阅读。

PCRE函数在C语言中的使用小例子.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/984049.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: