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