程序如下:
int match(
char * regexp,
char *text);
int matchhere( char * regexp, char *text);
int matchstar( int c, char *regexp, char *text);
int main( int argc, char* argv[])
{
printf( "Hello World!\n");
int t=match( "t.a*$", "twaaaaw");
printf( "result :%d \n",t);
return 0;
}
/* match: search for regexp anywhere in text */
int match( char *regexp, char *text)
{
if (regexp[0] == '^')
return matchhere(regexp+1, text);
do { /* must look even if string is empty */
if (matchhere(regexp, text))
return 1;
} while (*text++ != '\0');
return 0;
}
/* matchhere: search for regexp at beginning of text */
int matchhere( char *regexp, char *text)
{
printf( "2 %s,%s\n",regexp,text);
if (regexp[0] == '\0')
return 1;
if (regexp[1] == '*') {
//printf("%c,%s,%s\n",regexp[0],regexp+2,text);
return matchstar(regexp[0], regexp+2, text);
}
if (regexp[0] == '$' && regexp[1] == '\0')
return *text == '\0';
if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text))
return matchhere(regexp+1, text+1);
return 0;
}
/* matchstar: search for c*regexp at beginning of text */
int matchstar( int c, char *regexp, char *text)
{
printf( "3 %c,%s,%s\n",c,regexp,text);
do { /* a * matches zero or more instances */
if (matchhere(regexp, text))
return 1;
} while (*text != '\0' && (*text++ == c || c == '.'));
return 0;
}
int matchhere( char * regexp, char *text);
int matchstar( int c, char *regexp, char *text);
int main( int argc, char* argv[])
{
printf( "Hello World!\n");
int t=match( "t.a*$", "twaaaaw");
printf( "result :%d \n",t);
return 0;
}
/* match: search for regexp anywhere in text */
int match( char *regexp, char *text)
{
if (regexp[0] == '^')
return matchhere(regexp+1, text);
do { /* must look even if string is empty */
if (matchhere(regexp, text))
return 1;
} while (*text++ != '\0');
return 0;
}
/* matchhere: search for regexp at beginning of text */
int matchhere( char *regexp, char *text)
{
printf( "2 %s,%s\n",regexp,text);
if (regexp[0] == '\0')
return 1;
if (regexp[1] == '*') {
//printf("%c,%s,%s\n",regexp[0],regexp+2,text);
return matchstar(regexp[0], regexp+2, text);
}
if (regexp[0] == '$' && regexp[1] == '\0')
return *text == '\0';
if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text))
return matchhere(regexp+1, text+1);
return 0;
}
/* matchstar: search for c*regexp at beginning of text */
int matchstar( int c, char *regexp, char *text)
{
printf( "3 %c,%s,%s\n",c,regexp,text);
do { /* a * matches zero or more instances */
if (matchhere(regexp, text))
return 1;
} while (*text != '\0' && (*text++ == c || c == '.'));
return 0;
}
打印出来的文本:
2 t.a*$,twaaaaw
2 .a*$,waaaaw
2 a*$,aaaaw
3 a,$,aaaaw
2 $,aaaaw
2 $,aaaw
2 $,aaw
2 $,aw
2 $,w
2 t.a*$,waaaaw
2 t.a*$,aaaaw
2 t.a*$,aaaw
2 t.a*$,aaw
2 t.a*$,aw
2 t.a*$,w
2 t.a*$,
result :0
2 .a*$,waaaaw
2 a*$,aaaaw
3 a,$,aaaaw
2 $,aaaaw
2 $,aaaw
2 $,aaw
2 $,aw
2 $,w
2 t.a*$,waaaaw
2 t.a*$,aaaaw
2 t.a*$,aaaw
2 t.a*$,aaw
2 t.a*$,aw
2 t.a*$,w
2 t.a*$,
result :0
转换成为JAVA:
public
int match(String regexp, String text) {
if (regexp.charAt(0) == '^') {
return matchhere(substr(regexp, 1), text);
}
int i = 0;
do {
text = substr(text, i++ > 0 ? 1 : 0);
if (matchhere(regexp, text) == 1) {
return 1;
}
} while (text.charAt(0) != '\0');
return 0;
}
public int matchhere(String regexp, String text) {
System.out.println( "2 " + regexp + "," + text);
char c = regexp.charAt(0);
if (c == '\0') {
return 1;
}
if (regexp.length() > 1 && regexp.charAt(1) == '*') {
return matchstar(c, substr(regexp, 2), text);
}
if (c == '$' && regexp.length() == 1) {
return text.charAt(0) == '\0' ? 1 : 0;
}
if (text != "\0" && (c == '.' || text.charAt(0) == c)) {
return matchhere(substr(regexp, 1), substr(text, 1));
}
return 0;
}
public int matchstar( char c, String regexp, String text) {
System.out.println( "3 " + c + "," + regexp + "," + text);
int i = 0;
do {
text = substr(text, i++ > 0 ? 1 : 0);
if (matchhere(regexp, text) == 1) {
return 1;
}
} while (text.charAt(0) != '\0' && (c == '.' || text.charAt(0) == c));
return 0;
}
private static String substr(String s, int i) {
if (s != null && s.length() > i) {
return s.substring(i);
} else {
return "\0";
}
}
if (regexp.charAt(0) == '^') {
return matchhere(substr(regexp, 1), text);
}
int i = 0;
do {
text = substr(text, i++ > 0 ? 1 : 0);
if (matchhere(regexp, text) == 1) {
return 1;
}
} while (text.charAt(0) != '\0');
return 0;
}
public int matchhere(String regexp, String text) {
System.out.println( "2 " + regexp + "," + text);
char c = regexp.charAt(0);
if (c == '\0') {
return 1;
}
if (regexp.length() > 1 && regexp.charAt(1) == '*') {
return matchstar(c, substr(regexp, 2), text);
}
if (c == '$' && regexp.length() == 1) {
return text.charAt(0) == '\0' ? 1 : 0;
}
if (text != "\0" && (c == '.' || text.charAt(0) == c)) {
return matchhere(substr(regexp, 1), substr(text, 1));
}
return 0;
}
public int matchstar( char c, String regexp, String text) {
System.out.println( "3 " + c + "," + regexp + "," + text);
int i = 0;
do {
text = substr(text, i++ > 0 ? 1 : 0);
if (matchhere(regexp, text) == 1) {
return 1;
}
} while (text.charAt(0) != '\0' && (c == '.' || text.charAt(0) == c));
return 0;
}
private static String substr(String s, int i) {
if (s != null && s.length() > i) {
return s.substring(i);
} else {
return "\0";
}
}
转载于:https://blog.51cto.com/kinkding/140928