加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

读书笔记之正则表达式匹配器(一)

发布时间:2020-12-14 02:24:26 所属栏目:百科 来源:网络整理
导读:正则表达式匹配器 正则表达式是描述文本的表示法,它可以有效地构造一种模式匹配夫人专用语言,他们虽有许多不同的形式,但他们有着共同的思想:模式中的大多数字符都是匹配字符串中的字符本身。但有些元字符有特殊的含义,比如 * 表示某种重复,[...]表示方

正则表达式匹配器

正则表达式是描述文本的表示法,它可以有效地构造一种模式匹配夫人专用语言,他们虽有许多不同的形式,但他们有着共同的思想:模式中的大多数字符都是匹配字符串中的字符本身。但有些元字符有特殊的含义,比如 * 表示某种重复,[...]表示方括号中字符集合的任何一个字符,*.c 表示以 .c结尾的文件。

以下的代码实现了一个正则表达式,用来处理下面的模型:

字符 含义
c 匹配任意的字母c
.(句点) 匹配任意的单个字符
^ 匹配输入字符串的开头
$ 匹配输入字符串的结尾
* 匹配前一个字符的零个或者多个出现

如下程序将读取标准输入或者一组文件,然后输出包含与正则表达式匹配的文件

 
 
  1. /*match:searchforregexpanywhereintext*/
  2. intmatch(char*regexp,char*text)
  3. {
  4. if(regexp[0]=='^')
  5. returnmatchhere(regexp+1,text);
  6. do{/*mustlookevenifstringisempty*/
  7. if(matchhere(regexp,text))
  8. return1;
  9. }while(*text++!='');//当未到达文件尾部时
  10. return0;
  11. }
  12. /*matchhere:searchforregexpatbeginningoftext*/
  13. intmatchhere(char*regexp,char*text)
  14. {
  15. if(regexp[0]=='')
  16. return1;
  17. if(regexp[1]=='*')
  18. returnmatchhere(regexp[0],regexp+2,text);
  19. if(regexp[0]=='$'&&regexp[1]=='')
  20. return*text=='';
  21. if(*text!=''&&(regexp[0]=='.'||regexp[0]==*text))
  22. returnmatchhere(regexp+1,text+1);
  23. return0;
  24. }
  25. /*matchstar:searchforc*regexpatbeginningoftext*/
  26. intmatchstar(intc,char*regexp,char*text)
  27. {
  28. do{/*a*matcheszeroormoreinstaances*/
  29. if(matchhere(regexp,text))
  30. return1;
  31. }while(*text!=''&&(*text++==c||c=='.'));
  32. return0;
  33. }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读