Hello tout le monde,
Comment definir une expression reguliere qui pourra etre appliquee a tous types de string ? L'exemple suivant affiche "Matched" si la chaine passee est "abc" :
Cet exemple fonctionne dans le cas ou le basic_regex est instancie avec une std::string. Cependant, il y a erreur a la compilation lorsqu'on veut utiliser une std::wstring : dans ce cas, la ligne qui definit le basic_regex devrait etre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #include <string> #include <iostream> using namespace std; #include <boost/regex.hpp> using namespace boost; template <typename StrT> struct my_parser { bool match( const StrT& ) const; }; template <typename StrT> bool my_parser<StrT>::match( const StrT& a_str ) const { match_results<typename StrT::const_iterator> m; basic_regex<typename StrT::value_type> r( "abc" ); regex_match( a_str, m, r ); } int main() { my_parser<string> p; string s = "abc"; //my_parser<wstring> p; //wstring s = L"abc"; if ( p.match( s ) ) { cout << "Matched" << endl; } return 0; };
Notez bien le L devant la chaine "abc" : c'est une wstring.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 basic_regex<typename StrT::value_type> r( L"abc" );
J'aimerai rendre ce code generique compatible avec d'autres chaines, comme les QString de Qt par exemple : quelle methode vous semble la plus appropriee ?
Merci beaucoup !
Partager