正規表現でIPアドレス判定ーC言語ーその4
正規表現でIPアドレス判定ーC言語ーその3 - Shammerismで予想した、regcomp の最後の引数を REG_NOSUB だけにする実装を試してみた。
#include <regex.h> #include <stdio.h> int main(int argc, char* args[]){ if( argc == 2 ){ regex_t preg; int regcompresult; regcompresult = regcomp(&preg, "/^(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$/", REG_NOSUB); if( regcompresult == 0 ){ printf("%s is valid.\n", args[1]); } else { printf("%s is invalid.\n", args[1]); } } else { printf("%s is required only 1 argument.\n", args[0]); printf("Usage: %s $1\n", args[0]); } return 0; }
実行結果は以下。
$ gcc regex-sample-2.c $ ./a.out 192 192 is valid. $ ./a.out 235 235 is valid. $ ./a.out 255 255 is valid. $ ./a.out 256 256 is valid. $ ./a.out aaa aaa is valid. $
やっぱり何かおかしい、と思ったが、regcomp の結果で判定していた。regcomp は正規表現のコンパイルだ。実際の比較をしているわけじゃない。regcomp でコンパイルした正規表現を使用して、regexec で比較というようにしないといけないのに、肝心の regexec をやっていない。とんだケアレスミスというかボケというか・・・