正規表現でIPアドレス判定ーC言語ーその7
正規表現でIPアドレス判定ーC言語ーその6 - Shammerismの実装でも期待した結果を得られず。そのため、もっと話を単純にしてみることにした。手始めに、一桁の数字であればOKと判定する正規表現にしたい。以下のようにしてみた。
#include <ctype.h> #include <regex.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char* args[]){ if( argc == 2 ){ regex_t preg; int regcompresult; regcompresult = regcomp(&preg, "[0-9]", REG_NOSUB | REG_EXTENDED | REG_NEWLINE); if( regcompresult == 0 ){ size_t nmatch = 0; regmatch_t pmatch[nmatch]; int regexecresult; regexecresult = regexec(&preg, args[1], nmatch, pmatch, 0); if( regexecresult == 0 ){ printf("%s is valid.\n", args[1]); } else { printf("%s is not valid.\n", args[1]); } } else { printf("Regular Expression compile failed.\n"); } } else { printf("%s is required only 1 argument.\n", args[0]); printf("Usage: %s $1\n", args[0]); } return 0; }
実行結果は以下の通り。
$ ./a.out 5 5 is valid. $ ./a.out 50 50 is valid. $ ./a.out aa aa is not valid. $ ./a.out 50000 50000 is valid. $ ./a.out 5000023495 5000023495 is valid. $ ./a.out 5000023495a 5000023495a is valid. $ ./a.out xxx5000023495 xxx5000023495 is valid.
想定では、[0-9]という正規表現であれば一桁の数字のみがOKになると思ったが、実際には数字が含まれていればOKという感じだ。思った以上に先は長くなりそう。次の一歩は xxx5000023495 や 5000023495a のように、数字以外の文字が含まれていたらはじくようにすること。
行頭と行末を追加すればできるかもしれない。