#include #include using namespace std; #include int main() { string str = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; string pattern = "^(([rRnNbBqQkKpP1-8]{1,8}/){7,7}[rRnNbBqQkKpP1-8]{1,8}) ([wb]) ([KQkq]{1,4}|-) ([a-h][1-8]|-) ([\\d]) ([\\d])"; pcre *re; int options = 0; const char * error; int erroffset; re = pcre_compile ((char *) pattern.c_str(), options, &error, &erroffset, NULL); if(! re) { cerr << "Failed" << endl; } else { int count = 0; int ovector[24]; count = pcre_exec (re, NULL, (char *) str.c_str(), str.length(), 0, 0, ovector, 24); cout << "Count: " << count << endl; if(! count) { cerr << "No match" << endl; } else { /** 0: 0/56: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 2: 0/43: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR 4: 26/35: PPPPPPPP/ 6: 44/45: w 8: 46/50: KQkq 10: 51/52: - 12: 53/54: 0 14: 55/56: 1 */ cout << str.substr(ovector[2], ovector[2 + 1] - ovector[2]) << endl; cout << str.substr(ovector[6], ovector[6 + 1] - ovector[6]) << endl; cout << str.substr(ovector[8], ovector[8 + 1] - ovector[8]) << endl; cout << str.substr(ovector[10], ovector[10 + 1] - ovector[10]) << endl; cout << str.substr(ovector[12], ovector[12 + 1] - ovector[12]) << endl; cout << str.substr(ovector[14], ovector[14 + 1] - ovector[14]) << endl; } } cout << endl; return 0; }