如何使用pcre库在c程序中匹配url
问题描述:
如何匹配url /[a-z0-9]/phpmyadmin/
? 如果url匹配正则表达式= /^\/([a-z0-9])+\/phpmyadmin/g
如何捕获组以char进行进一步操作?如何使用pcre库在c程序中匹配url
例如,我有这个
char *url = "/zs0099/phpmyadmin";
我想匹配它的正则表达式/^\/([a-z0-9])+\/phpmyadmin/g
如果从臀部(但没有PCRE),裸C,然后匹配
char *token = "zs0099"; //(how to get this value to assigned here)
答
快速射击(小状态机)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int isMatch(char *url, char *p) {
int state= 0;
while (*url != 0) {
switch (state) {
// first state: char must be '/'
case 0:
if (*url != '/') return 0;
state=1;
url++;
break;
// only characters and numbers are valid, another '/' ends this
case 1:
if (isalpha(*url) || isdigit(*url)) { *p++=*url; url++; break; }
if (*url == '/') { url++; state=2; break; }
return 0; // not alhanum nor '/' --> not valid;
break;
case 2:
*p++=0;
if (strcmp(url, "phpmyadmin")==0) return 1;
return 0;
}
}
return 0;
}
int main() {
char part[256];
char *x1 = "/019sasA/phpmyadmin";
int matches = isMatch(x1, part);
printf ("%s, %i --> %s \n", x1, matches , matches ? part : "");
char *x2 = "/019sasA/phpadmin";
matches = isMatch(x2, part);
printf ("%s, %i --> %s \n", x2, matches , matches ? part : "");
char *x3 = "/019sa,sA/phpmyadmin";
matches = isMatch(x3, part);
printf ("%s, %i --> %s \n", x3, matches , matches ? part : "");
}
可能的问题:
“// phpmyadmin的” 是有效的(可以容易地固定多一个状态,其中所述第一状态仅接受ISDIGIT()和ISNUMBER(),无 '/')
“/ phpmyadmin的” 无效
一个好的搜索引擎是你的朋友http://www.mitchr.me/SS/exampleCode/AUPG/pcre_example.c.html – dvhh