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

正则表达式匹配器

正则表达式是描述文本的表示法,它可以有效地构造一种模式匹配夫人专用语言,他们虽有许多不同的形式,但他们有着共同的思想:模式中的大多数字符都是匹配字符串中的字符本身。但有些元字符有特殊的含义,比如 * 表示某种重复,[...]表示方括号中字符集合的任何一个字符,*.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++!='\0');//当未到达文件尾部时
  10. return0;
  11. }
  12. /*matchhere:searchforregexpatbeginningoftext*/
  13. intmatchhere(char*regexp,char*text)
  14. {
  15. if(regexp[0]=='\0')
  16. return1;
  17. if(regexp[1]=='*')
  18. returnmatchhere(regexp[0],regexp+2,text);
  19. if(regexp[0]=='$'&&regexp[1]=='\0')
  20. return*text=='\0';
  21. if(*text!='\0'&&(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!='\0'&&(*text++==c||c=='.'));
  32. return0;
  33. }

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...