#include <string> 
#include <iostream> 
#include <regex> 
using  namespace  std; 
 
int  main( )  { 
	std:: regex  r( R"((\b [[:alpha:]]+\b )|(\b \d+\b ))" ) ; 
	std:: string  s =  "foo bar 123" ; 
	for ( std:: sregex_iterator  i =  std:: sregex_iterator ( s.begin ( ) , s.end ( ) , r) ; 
                             i ! =  std:: sregex_iterator ( ) ; 
                             ++ i) 
    { 
        std:: smatch  m =  * i; 
        std:: cout  <<  "Match value: "  <<  m.str ( )  <<  " at Position "  <<  m.position ( )  <<  '\n ' ; 
 
        for ( auto  index =  1 ;  index <  m.size ( ) ;  ++ index ) { 
        	if  ( m[ index] .matched )  { 
				std:: cout  <<  "Capture group ID: "  <<  index- 1  <<  std:: endl ; 
				break ; 
        	} 
		} 
    } 
	return  0 ; 
} 
 
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCXN0ZDo6cmVnZXggcihSIigoXGJbWzphbHBoYTpdXStcYil8KFxiXGQrXGIpKSIpOwoJc3RkOjpzdHJpbmcgcyA9ICJmb28gYmFyIDEyMyI7Cglmb3Ioc3RkOjpzcmVnZXhfaXRlcmF0b3IgaSA9IHN0ZDo6c3JlZ2V4X2l0ZXJhdG9yKHMuYmVnaW4oKSwgcy5lbmQoKSwgcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBzdGQ6OnNyZWdleF9pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraSkKICAgIHsKICAgICAgICBzdGQ6OnNtYXRjaCBtID0gKmk7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJNYXRjaCB2YWx1ZTogIiA8PCBtLnN0cigpIDw8ICIgYXQgUG9zaXRpb24gIiA8PCBtLnBvc2l0aW9uKCkgPDwgJ1xuJzsKICAgICAgICAKICAgICAgICBmb3IoYXV0byBpbmRleCA9IDE7IGluZGV4IDwgbS5zaXplKCk7ICsraW5kZXggKXsKICAgICAgICAJaWYgKG1baW5kZXhdLm1hdGNoZWQpIHsKCQkJCXN0ZDo6Y291dCA8PCAiQ2FwdHVyZSBncm91cCBJRDogIiA8PCBpbmRleC0xIDw8IHN0ZDo6ZW5kbDsKCQkJCWJyZWFrOwogICAgICAgIAl9CgkJfQogICAgfQoJcmV0dXJuIDA7Cn0K