嗨我有下面的代碼,這是爲了檢查輸入的網址是否有效。然而,程序總是失敗的第一個如果陳述。檢查網址與正則表達式c
regex_t regex;
int reti;
char msgbuf[100];
/* Compile regular expression */
reti = regcomp(®ex, "^^((([hH][tT][tT][pP][sS]?|[fF][tT][pP])\:\/\/)?([\w\.\-]+(\:[\w\.\&%\$\-]+)*@)?((([^\s\(\)\<\>\\\"\.\[\]\,@;:]+)(\.[^\s\(\)\<\>\\\"\.\[\]\,@;:]+)*(\.[a-zA-Z]{2,4}))|((([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2[0-4]\d|25[0-5])))(\b\:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)\b)?((\/[^\/][\w\.\,\?\'\\\/\+&%\$#\=~_\[email protected]]*)*[^\.\,\?\"\'\(\)\[\]!;<>{}\s\x7F-\xFF])?)$", 0);
if(reti){
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
/* Execute regular expression */
reti = regexec(®ex, str, 0, NULL, 0);
if(!reti){
puts("Match");
}
else if(reti == REG_NOMATCH){
puts("No match");
}
else{
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
exit(1);
}
/* Free compiled regular expression if you want to use the regex_t again */
regfree(®ex);
總是執行第一個if語句的原因是什麼?還有更好的方法來檢查url是否在語法上正確?
這是一個討厭的正規表達式..你從哪裏得到它?立即看起來你不想以'^^'開頭,因爲這會匹配字符串的兩個開始。可能不是正則表達式不能編譯的原因.. – arc 2012-03-12 19:11:53