正则表达式匹配器
正则表达式是描述文本的表示法,它可以有效地构造一种模式匹配夫人专用语言,他们虽有许多不同的形式,但他们有着共同的思想:模式中的大多数字符都是匹配字符串中的字符本身。但有些元字符有特殊的含义,比如 * 表示某种重复,[...]表示方括号中字符集合的任何一个字符,*.c 表示以 .c结尾的文件。
以下的代码实现了一个正则表达式,用来处理下面的模型:
字符 | 含义 |
c | 匹配任意的字母c |
.(句点) | 匹配任意的单个字符 |
^ | 匹配输入字符串的开头 |
$ | 匹配输入字符串的结尾 |
* | 匹配前一个字符的零个或者多个出现 |
如下程序将读取标准输入或者一组文件,然后输出包含与正则表达式匹配的文件
- @H_404_54@/*match:searchforregexpanywhereintext*/
- @H_404_54@intmatch(char*regexp,char*text)
- @H_404_54@{
- @H_404_54@if(regexp[0]=='^')
- @H_404_54@returnmatchhere(regexp+1,text);
- @H_404_54@do{/*mustlookevenifstringisempty*/
- @H_404_54@if(matchhere(regexp,text))
- @H_404_54@return1;
- @H_404_54@}while(*text++!='\0');//当未到达文件尾部时
- @H_404_54@return0;
- @H_404_54@}
- @H_404_54@
- @H_404_54@/*matchhere:searchforregexpatbeginningoftext*/
- @H_404_54@intmatchhere(char*regexp,char*text)
- @H_404_54@{
- @H_404_54@if(regexp[0]=='\0')
- @H_404_54@return1;
- @H_404_54@if(regexp[1]=='*')
- @H_404_54@returnmatchhere(regexp[0],regexp+2,text);
- @H_404_54@
- @H_404_54@if(regexp[0]=='$'&®exp[1]=='\0')
- @H_404_54@return*text=='\0';
- @H_404_54@if(*text!='\0'&&(regexp[0]=='.'||regexp[0]==*text))
- @H_404_54@returnmatchhere(regexp+1,text+1);
- @H_404_54@return0;
- @H_404_54@}
- @H_404_54@
- @H_404_54@/*matchstar:searchforc*regexpatbeginningoftext*/
- @H_404_54@intmatchstar(intc,char*regexp,char*text)
- @H_404_54@{
- @H_404_54@do{/*a*matcheszeroormoreinstaances*/
- @H_404_54@if(matchhere(regexp,text))
- @H_404_54@return1;
- @H_404_54@}while(*text!='\0'&&(*text++==c||c=='.'));
- @H_404_54@return0;
- @H_404_54@}