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

前端之家收集整理的这篇文章主要介绍了读书笔记之正则表达式匹配器(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

正则表达式匹配器

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

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

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

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

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

猜你在找的正则表达式相关文章