#include <regex.h>
#include <stdio.h>
int main( int argv, char* args[] )
{
char checkString[] = "abc, def, ghi"; // チェックをする文字列
const char regex[] = "([a-z]+), ([a-z]+), ([a-z]+)"; // マッチングをする文字列
regex_t regexBuffer; // 正規表現オブジェクト
int i,j;
int size;
// パターンにマッチングしたインデックス格納する構造体
regmatch_t patternMatch[4];
// 正規表現オブジェクトのコンパイル
if( regcomp( ®exBuffer, regex, REG_EXTENDED | REG_NEWLINE ) != 0 )
{
puts("regex compile failed" ); return 1;
}
size = sizeof( patternMatch ) / sizeof( regmatch_t );
if( regexec( ®exBuffer, checkString, size, patternMatch, 0 ) != 0 )
{
return 1;
}
// マッチした場合patternMatch構造体に文字列のindex番号が入る
// 配列の数がマッチ数を超えていた場合超えた構造体の各要素には-1が入る
for( i = 0; i < size; ++i )
{
int startIndex = patternMatch[i].rm_so;
int endIndex = patternMatch[i].rm_eo;
if( startIndex == -1 || endIndex == -1 )
{
continue;
}
for(j
=startIndex
;j
<endIndex
;j
++)putchar(checkString
[j
]); }
// オブジェクトの開放
regfree( ®exBuffer );
return 0;
}
I2luY2x1ZGUgPHJlZ2V4Lmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKaW50IG1haW4oIGludCBhcmd2LCBjaGFyKiBhcmdzW10gKQp7CiAgICBjaGFyIGNoZWNrU3RyaW5nW10gPSAiYWJjLCBkZWYsIGdoaSI7ICAgICAgICAgICAgICAgICAgIC8vIOODgeOCp+ODg+OCr+OCkuOBmeOCi+aWh+Wtl+WIlwogICAgY29uc3QgY2hhciByZWdleFtdID0gIihbYS16XSspLCAoW2Etel0rKSwgKFthLXpdKykiOyAgICAvLyDjg57jg4Pjg4Hjg7PjgrDjgpLjgZnjgovmloflrZfliJcKICAgIHJlZ2V4X3QgcmVnZXhCdWZmZXI7ICAgIC8vIOato+imj+ihqOePvuOCquODluOCuOOCp+OCr+ODiAogICAgaW50IGksajsKICAgIGludCBzaXplOwogICAgLy8g44OR44K/44O844Oz44Gr44Oe44OD44OB44Oz44Kw44GX44Gf44Kk44Oz44OH44OD44Kv44K55qC857SN44GZ44KL5qeL6YCg5L2TCiAgICByZWdtYXRjaF90IHBhdHRlcm5NYXRjaFs0XTsKCiAgICAvLyDmraPopo/ooajnj77jgqrjg5bjgrjjgqfjgq/jg4jjga7jgrPjg7Pjg5HjgqTjg6sKICAgIGlmKCByZWdjb21wKCAmcmVnZXhCdWZmZXIsIHJlZ2V4LCBSRUdfRVhURU5ERUQgfCBSRUdfTkVXTElORSApICE9IDAgKQogICAgewogICAgICAgIHB1dHMoInJlZ2V4IGNvbXBpbGUgZmFpbGVkIiApOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHNpemUgPSBzaXplb2YoIHBhdHRlcm5NYXRjaCApIC8gc2l6ZW9mKCByZWdtYXRjaF90ICk7CiAgICBpZiggcmVnZXhlYyggJnJlZ2V4QnVmZmVyLCBjaGVja1N0cmluZywgc2l6ZSwgcGF0dGVybk1hdGNoLCAwICkgIT0gMCApCiAgICB7CiAgICAgICAgcHV0cygiTm8gbWF0Y2ghISIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8vIOODnuODg+ODgeOBl+OBn+WgtOWQiHBhdHRlcm5NYXRjaOani+mAoOS9k+OBq+aWh+Wtl+WIl+OBrmluZGV455Wq5Y+344GM5YWl44KLCiAgICAvLyDphY3liJfjga7mlbDjgYzjg57jg4Pjg4HmlbDjgpLotoXjgYjjgabjgYTjgZ/loLTlkIjotoXjgYjjgZ/mp4vpgKDkvZPjga7lkITopoHntKDjgavjga8tMeOBjOWFpeOCiwogICAgZm9yKCBpID0gMDsgaSA8IHNpemU7ICsraSApCiAgICB7CiAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBwYXR0ZXJuTWF0Y2hbaV0ucm1fc287CiAgICAgICAgaW50IGVuZEluZGV4ID0gcGF0dGVybk1hdGNoW2ldLnJtX2VvOwogICAgICAgIGlmKCBzdGFydEluZGV4ID09IC0xIHx8IGVuZEluZGV4ID09IC0xICkKICAgICAgICB7CiAgICAgICAgICAgCXB1dHMoImV4aXQiKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAJZm9yKGo9c3RhcnRJbmRleDtqPGVuZEluZGV4O2orKylwdXRjaGFyKGNoZWNrU3RyaW5nW2pdKTsKICAgICAgICBwdXRjaGFyKCdcbicpOwogICAgfQoKICAgIC8vIOOCquODluOCuOOCp+OCr+ODiOOBrumWi+aUvgogICAgcmVnZnJlZSggJnJlZ2V4QnVmZmVyICk7CiAgICByZXR1cm4gMDsKfQ==