《The Practice of Programming》 一书中有很多优美的示例代码。
下面的这个关于正则表达式的匹配算法的C语言版是 作者之一 Rob Pike的作品。
/* match: 在 text 中查找 regexp */ int match(char *regexp, char *text) { if(regexp[0] == '^'){ return matchhere(regexp+1, text); } do{ /* 即使字符串为空时也必须检查 */ if(matchhere(regexp, text)){ return 1; } } while(*text++ != '\0'); return 0; } /* matchhere: 在 text 的开头查找 regexp */ int matchhere(char *regexp, char *text) { if(regexp[0] == '\0'){ return 1; } if(regexp[1] == '*'){ return matchstar(regexp[0], regexp+2, text); } if(regexp[0] == '$' && regexp[1] == '\0')){ return *text == '\0'; } if(*text != '\0' && (regexp[0] == '.' || regexp[0] == *text){){ return matchhere(regexp+1, text+1); } return 0; } /* matchstar: 在text 的开头查找 C*regexp */ int matchstar(int c, char *regexp, char *text) { do{ /* 通配符 * 匹配零个或多个实例 */ if(matchhere(regexp, text)){ return 1; } } while(*text != '\0' && (*text++ == c || c == '.')); return 0; } matchstar 的变体变体 /* matchstar: 搜索 C*regexp 的最左以及最长的匹配 */ int matchstar(int c, char *regexp, char *text) { char *t; for(t = text; *t != '\0' && (*t == c || c == '.'); t++){ ; } do{ /* 通配符 * 匹配零个或多个实例 */ if(matchhere(regexp, t)){ return 1; } } while(t-->text); return 0; }
相关推荐
借用代码之美中的正则表达式匹配代码,供大家学习用。
本文是对正则表达式匹配算法的一个小结,主要分三部分:1.经典算法;2.并行算法;3.过滤算法。本文只是小结,如需要详细了解个算法,请参考个算法的相关论文。
面向网络安全的多维正则表达式匹配算法分析.pdf
通过基于真实网络流量的评测,比较了几种经典匹配算法在不同规则集上的匹配速度、内存占用和预处理时间等性能指标,并给出了不同需求场景下高效正则表达式匹配算法的选择建议,归纳了高性能正则表达式匹配算法的下...
针对确定有限自动机(DFA)的正则表达式匹配技术存在状态膨胀和一次状态转移只能处理单个字符的问题,提出了一种基于布鲁姆过滤器的正则表达式匹配算法。该算法将正则表达式中的每个确定字符串组成DFA的一个状态,...
基于FPGA的正则表达式匹配算法综述.pdf
web前端-基于规则集的正则表达式匹配算法研究.pdf
实现3-11正则表达式匹配问题.cpp
正则表达式匹配算法评测系统的实现,况鑫楠,高占春,在网络信息随时间呈指数增长的今天,流数据的量级越来越大,对用正则表达式对流数据进行过滤匹配的实时性要求也越来越高,正则表
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符...
该算法基于规则模板对规则集进行分组,各分组分别构建匹配引擎;同时,根据实际规则数目和系统结构改变规则子集的数目,达到更好的匹配效率。理论分析和实验表明,与传统分组算法相比,在存储空间压缩相当情况下,...
这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦. 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式...
在本文中,我们提出了一种用于正则表达式匹配的算法,该算法每次消耗多个字符,同时保持内存效率。 它包括3个想法:1)top-k状态提取; 2)。可变步幅加速度; 3)DFA压缩。我们在几种现实的RE规则集上测试了算法。...
#资源达人分享计划#
开发项目中比较常用的正则表达式列举出来:直接就可以使用。是本人多年开发经验积累下来的。
正则表达式匹配.md
正则表达式是一个很强的工具,可以在你的软件中增强查找、替换、匹配等功能。附件中封装了Henry Spencer的regex library源码,有说明和范例,纯C可移值,简单易用。
针对传统正则匹配性能低下的问题,设计了基于多GPU的正则表达式匹配引擎,并采用折半分组优化算法解决了有限状态自动机在大规模正则集合情况下由于空间爆炸无法使用的问题,并做了相关的优化,提升了数据匹配速度。...
大数据-算法