1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
/****************************************************************************
RegExp.c
This file contains the C code for the regular expression
matching code.
The routines supported act as a more friendly, user level
interface to the regexp regular expression matching system.
****************************************************************************/
/*
* Author:
* Brian Totty
* Department of Computer Science
* University Of Illinois at Urbana-Champaign
* 1304 West Springfield Avenue
* Urbana, IL 61801
*
* totty@cs.uiuc.edu
*
*/
#include "RegExp.h"
#include <regex.h>
void RegExpCompile(regexp,fsm_ptr)
char *regexp;
regex_t *fsm_ptr;
{
regcomp(fsm_ptr, regexp, REG_NOSUB|REG_EXTENDED);
/*
compile(regexp,fsm_ptr,&(fsm_ptr[fsm_length]),'\0');
*/
} /* End RegExpCompile */
int RegExpMatch(string,fsm_ptr)
char *string;
regex_t *fsm_ptr;
{
if (regexec(fsm_ptr, string, 0, NULL, 0) == 0)
return(TRUE);
return(FALSE);
/*
if (advance(string,fsm_ptr) != 0)
return(TRUE);
else
return(FALSE);
*/
} /* End RegExpMatch */
void _RegExpError(val)
int val;
{
fprintf(stderr,"Regular Expression Error %d\n",val);
exit(-1);
} /* End _RegExpError */
void RegExpPatternToRegExp(pattern,reg_exp)
char *pattern,*reg_exp;
{
int in_bracket;
in_bracket = 0;
while (*pattern != '\0')
{
if (in_bracket)
{
if (*pattern == ']') in_bracket = 0;
*reg_exp++ = *pattern++;
}
else
{
switch (*pattern)
{
case '[':
in_bracket = 1;
*reg_exp++ = '[';
break;
case '?':
*reg_exp++ = '.';
break;
case '*':
*reg_exp++ = '.';
*reg_exp++ = '*';
break;
case '.':
*reg_exp++ = '\\';
*reg_exp++ = '.';
break;
default:
*reg_exp++ = *pattern;
break;
}
++ pattern;
}
}
*reg_exp++ = '$';
*reg_exp++ = '\0';
} /* End RegExpPatternToRegExp */
|