热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

紧急求助!如何运用正则表达式(regexp)进行高效匹配操作?

如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。
如何使用regexp来进行正则表达式的匹配?
下面这个程序有何不妥,请各位打下指正:
#define INIT    register char *sp=instring;
#define GETC()  (*sp++)
#define PEEKC() (*sp)
#define UNGETC(c)   (--sp)
#define RETURN(c) return;
#define ERROR(c)    regerr()
#include 
#include 
main()
{
    char expbuf[10];
    char linebuf[80];
    strcpy(expbuf,"^[0-9]*$");
    compile((char *)0,expbuf,&expbuf[sizeof(expbuf)],'\0');
    for (;;)
    {
        printf("please input a string:\n");
        scanf("%s\n",linebuf);
        if (step(linebuf,expbuf))
        {
            printf("success!\n");
        }
        else
            printf("failed!\n");
    }
}

编译时提示regerr未定义,不知何故?希望各位大虾能以例程解答
请发email至bone_dragon@21cn.com,多谢!

5 个解决方案

#1


maybe this will help:
-----------------------------------
/*
**regtest.c: 已在linux(egcs) & solaris(gcc-2.95.2) 下调试通过
*/
#include 
#include 
main()
{
  regex_t re;
  char *expbuf="^[0-9]*$";
  char linebuf[80];
  regmatch_t pmatch[16];
 
  regcomp(&re,expbuf,0);
  for (;;){
    printf("please input a string:\n");
    scanf("%s",linebuf);
    if(0 == regexec(&re, linebuf,  16,pmatch,0))
      printf("success!\n");
    else
        printf("failed!\n");
  }
}   

#2


多谢指点,感激不尽,还有点小问题
能解释一下pmatch的作用么?

#3


pmatch用来保存匹配到的子串下标.
pmatch 是一个元素类型为regmatch_t的数组,在上例中有16个元素:
 
 typedef struct
 {
     regoff_t rm_so;
     regoff_t rm_eo;
  } regmatch_t;  

其中 rm_so 是子串首元素的下标(-1表示结束),rm_eo是子串末元素的下标加1;
pmatch[0]保存整个正则表达式的下标;
pmatch[1]保存正则表达式中第一个用"("和")"括起的部分的下标;
pmatch[2]...第二个...,

for example:
------------------------------
/* regtest2.c */

#include 
#include 
 
#define MAX_MATCH 16
 
main()
{
  int i;
  regex_t re;
  char *expbuf="(hello)[0-9]*(world)";
  char linebuf[80]="regexp_test hello123world good";
  regmatch_t pmatch[MAX_MATCH];
 
  printf("regular expression: %s\nInput string: %s\n",expbuf,linebuf);
 
  regcomp(&re,expbuf,REG_EXTENDED);
  if(0 == regexec(&re, linebuf,  MAX_MATCH,pmatch,0)){
        for(i=0;i            printf("start=%d, end=%d\n",pmatch[i].rm_so,pmatch[i].rm_eo);
  }
  else
      printf("failed!\n");
  regfree(&re);
}   
------------------------------
bash-2.04# ./regtest2
regular expression: (hello)[0-9]*(world)
Input string: regexp_test hello123world good
start=12, end=25
start=12, end=17
start=20, end=25 

#4


真想知道这个函数是怎么实现的,要是知道请不吝赐教。
开始我不知道存在这个函数,还打算写一个出来呢。
可是想来想去也没想到一个比较好的,只能通过最基本的从
上到下分析法,需要回溯,实在是麻烦的要紧。

#5


参考

推荐阅读
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • URL参数格式http:localhos:8080demo?ab&cd&ef匹配参数a对应的表达式为^a([^&]*)&匹配参数b对应的表达式为&b([^&]*)&匹配参数c对应 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 本文探讨了在当前正则表达式中支持空格字符的方法。作者尝试在正则表达式中允许空白字符,但遇到了一些问题,导致该表达式无法正确识别空格。文章详细分析了问题的原因,并提出了解决方案,旨在提高正则表达式的灵活性和实用性。 ... [详细]
  • Python正则表达式详解:掌握数量词用法轻松上手
    Python正则表达式详解:掌握数量词用法轻松上手 ... [详细]
  • 机器学习实践:逻辑回归与过拟合控制
    本文深入探讨了逻辑回归在机器学习中的应用,并详细解释了如何通过正则化等方法来有效避免模型的过拟合问题。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 利用Java开发功能完备的电话簿应用程序,支持添加、查询与删除操作
    本研究基于Java语言开发了一款功能全面的电话簿应用程序,实现了与数据库的高效连接。该应用不仅支持添加、查询和删除联系人信息,还具备输出最大和最小ID号的功能,并能够对用户输入的ID号进行有效性验证,确保数据的准确性和完整性。详细实现方法可参阅相关文档。 ... [详细]
  • 本文深入探讨了 Python Watchdog 库的使用方法和应用场景。通过详细的代码示例,展示了如何利用 Watchdog 监控文件系统的变化,包括文件的创建、修改和删除等操作。文章不仅介绍了 Watchdog 的基本功能,还探讨了其在实际项目中的高级应用,如日志监控和自动化任务触发。读者将能够全面了解 Watchdog 的工作原理及其在不同场景下的应用技巧。 ... [详细]
author-avatar
帕皮丝汀阿奎莱拉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有