Linux下的字符串匹配.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下的字符串匹配.ppt

Linux下的字符串匹配 L-TECH HPC-NQS)张磊 何时需要进行字符串匹配? 文本检索 入侵检测 数据挖掘 Linux字符串匹配的手段 自已写算法 使用正则表达式 使用特定的工具 自已写算法 最简单的匹配算法 int index(char *s, char *t,int pos) { /* *返回子串t在主串s中第pos个字符之后的位置 * 如果不存在,则返回-1 */ int i, j = 0; int len_s=strlen(s); int len_t=strlen(t); if(pos= len_s) return –1; i = pos, while(i len_s j len_t){ if (s[i] == t[j]) {i++; j++;} else{ i = i-(j-1); j=0;} } if (j = len_t){return i-len_t-pos;} else return -1; } 自已写算法 性能分析 s: ABABCABCACBAB t: ABCAC 自已写算法 KMP算法 当模式串与主串失配时,模式串根据自身来确定滑动距离。 A B A B C A B C A C B A B A B C 2) A B A B C A B C A C B A B A B C A C 3) A B A B C A B C A C B A B A B C A C 如何确定模式串每一次的滑动距离? 自已写算法 用next[j]表示模式中第j个字符与主串失配,则在模式中需重新和主串进行比较的位置 void get_next(char *t, int next[]){ int i = 0, j = -1; next[i] = -1; while(i(strlen(t)-1)){ if(j==-1||t[i]==t[j]){ i++;j++; if(t[i]!=t[j]) next[i]=j; else next[i]=next[j]; } else j=next[j]; } } 自已写算法 一般算法与KMP算法性能比较 一般算法: O(m*n) KMP算法:O(m+n) 其它一些字符串匹配著名算法 BM算法 BF算法 RK算法 自已写算法 优点 依整性小,不需要额外的库或工具支持 清晰,可以控制整个匹配过程 不足 不适合全文匹配 缺乏灵活性,无法进行动态匹配 Linux字符串匹配的手段 自已写算法 使用正则表达式 使用特定的工具 使用正则表达式 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。 Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 数学家在McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。 使用正则表达式 使用正则表达式 使用正则表达式 使用正则表达式 使用正则表达式 使用正则表达式 正则表达式的分类 POSIX 1003.2 定义 基本的正则表达式(BRE) 扩展的正则表达式(ERE) 未在POSIX 中定义 高级的正则表达式(ARE) 使用正则表达式 正则表达式的语法支持情况 使用正则表达式 在C语言中使用正则表达式 首先要将正则表达式进行编绎,将其转化为regex_t结构: int regcomp(regex_t *preg, const char *regex, int cflags); 一旦成功地编译了正则表达式,接下来就可以调用regexec()函数完成模式匹配: int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags); typedef struct { regoff_t rm_so; regoff_t

文档评论(0)

lnainai_sj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档