boost.regex expressions generiques
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" :
Code:
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;
}; |
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:
1 2
|
basic_regex<typename StrT::value_type> r( L"abc" ); |
Notez bien le L devant la chaine "abc" : c'est une wstring.
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 !