
std :: locale (рд╕реНрдерд╛рдиреАрдпрдХрд░рдг) рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рд╛рдВрд╕реНрдХреГрддрд┐рдХ рдФрд░ рднрд╛рд╖рд╛рдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧреЛрдВ - рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдЕрдЧрд░ рдЙрд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рдкрд╣рд▓реБрдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рдкрд╣рд▓реБрдУрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд╛рдирдХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдпрд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
- рдЯрдХрд░рд╛рдирд╛ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛)
- рд╕рдВрдЦреНрдпрд╛рддреНрдордХ (рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ)
- рдореМрджреНрд░рд┐рдХ (рдкреИрд╕реЗ рдХреА рдЬрдорд╛ / рдирд┐рдХрд╛рд╕реА)
- рд╕рдордп (рд╕рдордп рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ)
- ctype (рд╡рд░реНрдг рд╡рд░реНрдЧреАрдХрд░рдг)
- рд╕рдВрджреЗрд╢ (рд╕рдВрджреЗрд╢ рдЪрдпрди)
рд╣рдХреАрдХрдд рдореЗрдВ, рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдмрд┐рдирд╛ рд╢рдХ рдХреЗ рднреА рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рдирдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмрдврд╝рд╛рд╡рд╛ :: рдЪрд░рд┐рддреНрд░ рдорд╛рдорд▓реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП regex, рдЖрджрд┐ред рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред * Nix рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "ru_RU: UTF-8", "en_US.UTF-8" рдЬреИрд╕реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ - рдпреЗ рдордВрдЪ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдгреЛрдВ рдХреЗ рдирд╛рдо рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ "рдХреНрд▓рд╛рд╕рд┐рдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╣рд▓реВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдорд╛рдирдХ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкрд╣рд▓реВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рддрдХрдиреАрдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред рдЖрдЗрдП рд▓реЛрдХрдкреНрд░рд┐рдп рдмрдврд╝рд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: xpressive рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдЖрдк рднреА рдмрдврд╝рд╛рд╡рд╛ :: regex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЛ рд▓реЛрдЧ рдкрд╣рд▓реА рдмрд╛рд░ xpressive рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛):
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
#include <boost/xpressive/xpressive.hpp> #include <iostream> using namespace std ; using namespace boost :: xpressive ; int main ( int argc, char * argv [ ] ) { sregex xpr = sregex :: compile ( "" , regex_constants :: icase ) ; smatch match ; string str ( " !" ) ; if ( regex_search ( str, match, xpr ) ) cout << "icase ok" << endl ; else cout << "icase fail" << endl ; return 0 ; }
рдпрд╣ рдХреБрдЫ рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╡рд┐рддрд░рдг рдЕрддреНрдпрдзрд┐рдХ рдордВрдЪ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдордВрдЪ рдкрд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рд▓реЛрдХреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡рд┐рдВрдбреЛрдЬрд╝ -1251 рд╣реИ, рддреЛ "рдЖрдЗрдХрд╕ рдлреЗрд▓" рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЛрдХреЗрд▓ рдХреЛ cp1251 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдордВрдЪ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдЙрджрд╛рд╣рд░рдг mingw рд╣реИ (рдПрдХ рд╕реНрд░реЛрдд рдмрд╛рдЗрдирд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) + рд╡рд┐рдВрдбреЛрдЬред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрдврд╝рд╛рд╡рд╛ :: xpressive рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмрд╕ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ cp-1251 рдХреЛрдб рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреМрди рд╕реЗ рдЕрдХреНрд╖рд░ рд╣реИрдВред рдФрд░ рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ ctype facet рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рд╣реИред Xpressive рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд╕рд╣реА ctype рдкрд╣рд▓реВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдХреЗ, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- // рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕реЗрдЯ рдХрд░реЗрдВ
- std :: locale cp1251_locale ( "ru_RU.CP1251" ) ;
- std :: locale :: Global ( cp1251_locale ) ;
рдпрд╛ рдЗрд╕реЗ рд░реЗрдЧреЗрдХреНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ
- std :: locale cp1251_locale ( "ru_RU.CP1251" ) ;
- sregex_compiler рд╕рдВрдХрд▓рдХ ;
- // рд░реЗрдЧреЗрдХреНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рдХрд┐рд╕ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
- рд╕рдВрдХрд▓рдХред imbue ( cp1251_locale ) ;
- sregex xpr = рд╕рдВрдХрд▓рдХред рд╕рдВрдХрд▓рди ( "рджреБрдирд┐рдпрд╛" , regex_constants :: icase ) ;
рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдРрд╕реЗ рдордВрдЪ рдкрд░ рдЬрд╣рд╛рдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг ru_RU рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ: CP1251 рд╣рдорд╛рд░рд╛ рдХреЛрдб рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд╛рдо рдЧрд▓рдд рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдореЗрдВ - рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ ctype facet рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ xpressive рдХреЛ рд╕рдордЭрд╛рдПрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдЕрдХреНрд╖рд░ рдЕрдХреНрд╖рд░ рд╣реИрдВ рдФрд░ рдорд╛рдорд▓рд╛ рдХреИрд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ)ред
CP1251 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП ctype facet рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
- #include <рдмрдврд╝рд╛рд╡рд╛ / xpressive / xpressive.hpp>
- # рдХрд┐рдВрдХрд░реНрддрд╡реНрдпрд╡рд┐рдореВрдврд╝ <iostream>
- рдирд╛рдо рд╕реНрдерд╛рди std рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ;
- рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ :: xpressive ;
- / ** @ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ctype рдкрд╣рд▓реВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг
- * рдПрдиреНрдХреЛрдбреЗрдб Cp1251 * /
- рд╡рд░реНрдЧ ctype_cp1251 : рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ctype < char >
- {
- рдЬрдирддрд╛ :
- ctype_base рдореЗрдВ / ** @ breif рдорд╛рд╕реНрдХ рд╕рднреА рд╕рдВрднрд╡ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЧрдгрди рд╣реИ
- * рд╡рд░реНрдг - рдЕрд▓реНрдлрд╛, рдЕрдВрдХ, ... * /
- typedef рдЯрд╛рдЗрдкрдиреЗрдо ctype < char > :: ctype_base :: рдорд╛рд╕реНрдХ рдорд╛рд╕реНрдХ ;
- // рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
- рдПрдирдо {
- рдЕрд▓реНрдлрд╛ = ctype < char > :: рдЕрд▓реНрдлрд╛ ,
- рдирд┐рдЪрд▓рд╛ = ctype < char > :: рдирд┐рдЪрд▓рд╛ ,
- punct = ctype < char > :: punct
- // рдЕрдиреНрдп рдорд╛рд╕реНрдХ
- } ;
- / ** @ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдореБрдЦреНрдп рдирд┐рд░реНрдорд╛рддрд╛ред r - рдЬреАрд╡рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
- * рдкрд╣рд▓реВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реИрд╕рдкреБрдк рджреНрд╡рд╛рд░рд╛ рдкреБрд╕реНрддрдХ рджреЗрдЦреЗрдВред * /
- ctype_cp1251 ( size_t r = 0 )
- {
- // рдорд╛рд╕реНрдХ рдЯреЗрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред рд╕реВрдЪрдХрд╛рдВрдХ рдЪрд╛рд░ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
- // рдЕрд░реНрдерд╛рдд, ext_tab [1] рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдореБрдЦреМрдЯрд╛ рд╣реИ (-1) - 'i'
- ext_tab [ 0 ] = 0 ;
- for ( size_t i = 1 ; i <= 32 ; ++ i )
- ext_tab [ i ] = рдЕрд▓реНрдлрд╛ | рдХрдо ;
- for ( size_t i = 33 ; рдореИрдВ <= 64 ; ++ i )
- ext_tab [ i ] = рдЕрд▓реНрдлрд╛ | рдКрдкрд░реА ;
- // ... рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЕрдиреНрдп рд╡рд░реНрдг рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИрдВ
- for ( size_t i = 65 ; рдореИрдВ <= 128 ; ++ i )
- ext_tab [ i ] = punct ;
- }
- ~ ctype_cp1251 ( )
- { }
- рд╕рдВрд░рдХреНрд╖рд┐рдд :
- / ** @ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд░рд┐рддреНрд░ c, m * / рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
- рд╡рд░реНрдЪреБрдЕрд▓ рдмреВрд▓ рд╣реИ ( рдорд╛рд╕реНрдХ рдПрдо, рдЪрд╛рд░ рд╕реА ) рдХрд╛рд╕реНрдЯ
- {
- рдЕрдЧрд░ ( 0 <= c && c <= 127 )
- рд╡рд╛рдкрд╕реА ctype < char > :: is ( m, c ) ;
- рдФрд░ рдпрджрд┐ ( - 128 <= c && c < 0 )
- рд╡рд╛рдкрд╕реА ext_tab [ static_cast < size_t > ( c * - 1 ) ] & m ;
- }
- / ** @ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдзрд░реНрдорд╛рдиреНрддрд░рд┐рдд рдЧ
- рд╡рд░реНрдЪреБрдЕрд▓ рдЪрд╛рд░ do_toupper ( рдЪрд╛рд░ рд╕реА ) рдХрд╛рд╕реНрдЯ
- {
- рдЕрдЧрд░ ( 0 <= c && c <= 127 )
- рд╡рд╛рдкрд╕реА ctype < char > :: do_toupper ( c ) ;
- рдФрд░ рдпрджрд┐ ( ( рдХрдо рд╣реИ, рдЧ ) )
- рд╡рд╛рдкрд╕реА c - 32 ;
- рд╡рд╛рдкрд╕реА c ;
- }
- / ** @ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЪрд░рд┐рддреНрд░ рдХреЛ c рдХреЛ рдиреАрдЪреЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ * /
- рд╡рд░реНрдЪреБрдЕрд▓ рдЪрд╛рд░ do_tolower ( рдЪрд╛рд░ рд╕реА ) рдХрд╛рд╕реНрдЯ
- {
- рдЕрдЧрд░ ( 0 <= c && c <= 127 )
- рд╡рд╛рдкрд╕реА ctype < char > :: do_tolower ( c ) ;
- рдФрд░ рдпрджрд┐ ( ( рдКрдкрд░реА, рд╕реА ) )
- рд╡рд╛рдкрд╕реА c + 32 ;
- рд╡рд╛рдкрд╕реА c ;
- }
- // рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╛рдХреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ
- // рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдп
- рдирд┐рдЬреА :
- // рдирдХрд▓ рдкрд░ рд░реЛрдХ
- ctype_cp1251 ( const ctype_cp1251 & ) ;
- const ctype_cp1251 рдФрд░ рдСрдкрд░реЗрдЯрд░ = ( const ctype_cp1251 & ) ;
- рдорд╛рд╕реНрдХ ext_tab [ 129 ] ; // @ <рдХреЛрдб рддрд╛рд▓рд┐рдХрд╛ CP1251 рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднрд╛рдЧ рдХреЗ рдореБрдЦреМрдЯреЗ
- } ;
- int main ( int argc, char * argv [ ] )
- {
- // рдкрд╣рд▓реВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБ
- ctype < char > * ctype_cp1251_facet = new ctype_cp1251 ( ) ;
- // рд╡рд░реНрддрдорд╛рди рдПрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдпрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдмрдирд╛рдПрдВ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
- // рдореБрдЦрд░ рдкрд░рд┐рднрд╛рд╖рд┐рддред рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
- // рд╡рд░реНрдгрд┐рдд рдкрд╣рд▓реВ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдпрдХрд░рдг, рдлрд┐рд░ рд╕рднреА рд╡рд░реНрдЧ рдФрд░
- // рдлрд╝рдВрдХреНрд╢рди, рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
- рд▓реЛрдХреЗрд▓ cp1251_locale ( рд▓реЛрдХреЗрд▓ ( "" ) , ctype_cp1251_facet ) ;
- // рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдЧреЗрдХреНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдирд╛рдПрдВ
- sregex_compiler рд╕рдВрдХрд▓рдХ ;
- рд╕рдВрдХрд▓рдХред imbue ( cp1251_locale ) ;
- sregex xpr = рд╕рдВрдХрд▓рдХред рд╕рдВрдХрд▓рди ( "рджреБрдирд┐рдпрд╛" , regex_constants :: icase ) ;
- рд╕реНрдореИрд╢ рдореИрдЪ ;
- рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░ ( "рд╣реЗрд▓реЛ рдкреЗрд╕рд┐рдХ!" ) ;
- рдЕрдЧрд░ ( regex_search ( str, match, xpr ) )
- cout << "icase ok" << endl ;
- рдЕрдиреНрдпрдерд╛
- cout << "icase fail" << endl ;
- рд╡рд╛рдкрд╕реА 0 ;
- }
рдЕрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдорд╛рдирдХ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рд╛рдВрд╕реНрдХреГрддрд┐рдХ рдФрд░ рднрд╛рд╖рд╛рдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо / рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрд╕рдЯреАрдбреА рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг :: рд╕реНрдерд╛рдиреАрдп рд╡рд░реНрдЧ рдФрд░ рдкрд╣рд▓реВ рдЙрдкрдпреЛрдЧ рддрдХрдиреАрдХреЛрдВ рдХреЛ рдмреНрдпреЛрд░реНрди рд╕реНрдЯреНрд░реЙрдиреНрдЧрдЕрдк рдХреА рдкреБрд╕реНрддрдХ "рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ" рдХреЗ рддреАрд╕рд░реЗ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдореБрдЦреНтАНрдп рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНтАНрдкрд╖реНтАНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдПрд╕рдЯреАрдПрд▓ рдореИрдиреБрдЕрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ ред
рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХреЛрдбреЗрдХрд╛рд╡реЗрдЯ рдкрд╣рд▓реВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
______________________