正規表現でIPアドレス判定ーC言語ーその8
正規表現でIPアドレス判定ーC言語ーその7 - Shammerismの実装では、
判定文字が数字を含んでいればOKと判定してしまったので、行頭と行末記号を追加し、
数字のみであれば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 0 0 is valid. $ ./a.out 1 1 is valid. $ ./a.out 2 2 is valid. $ ./a.out 3 3 is valid. $ ./a.out 4 4 is valid. $ ./a.out 5 5 is valid. $ ./a.out 6 6 is valid. $ ./a.out 7 7 is valid. $ ./a.out 8 8 is valid. $ ./a.out 9 9 is valid. $ ./a.out 10 10 is not valid. $ ./a.out a5 a5 is not valid. $ ./a.out 5a 5a is not valid. $ ./a.out aaa aaa is not valid.
期待通りだ。まずは一歩前進。次は、1 から 99 までに挑戦。
一桁の正規表現に、パイプで別の表現を追加し、「または」の判定をさせるのが目標。