2010-08-29 1 views
0

Est-ce que \d++ est une expression régulière valide dans les langages de programmation qui ne prennent pas en charge le quantificateur possessive? Est-ce l'équivalent de (\d+)+?Quantificateurs imbriqués dans boost :: regex

Lors du test en Python, une erreur sre_constants.error: multiple repeat sera levée. En C#, il lancera une exception d'exécution: System.ArgumentException: parsing "\d++" - Nested quantifier +. Tout comme boost :: xpressive. Mais \d++...+ est considéré comme valide dans boost :: regex.

wchar_t* s = L"abc123" ; 
wregex e(L"\\d+++", boost::regex::normal) ; 
wcmatch m ; 

if(regex_search(s, m, e)){ 
    wcout << m[0] << endl ; 
} 

La sortie est 123.

Répondre

1

Le code ci-dessus lance pour moi une instance de boost :: bad_expression avec "Invalid previous regular expression". C'est un système redhat linux compilé avec gcc 3.4.6 et boost 1_32.

+0

Je l'ai compilé avec Visual C++ 2008 et boost 1.36 | 1.44. – Explogit

1

Sans quantificateurs possessifs, que signifierait \d++ (ou (\d+)+)? Supposons que ce soit une syntaxe valide, et que nous puissions la lire comme "un ou plusieurs (un ou plusieurs chiffres)". Dans ce cas, nous serions toujours en mesure de réduire l'expression à \d+ (\d+ correspond à un seul chiffre, donc (\d+)+ pourrait être simplifié à (\d)+, qui correspond toujours à un ou plusieurs chiffres). Par conséquent, \d++ serait redondant.

Je ne suis pas au courant d'un moteur d'expression régulière dont la syntaxe \d++ est valable, mis à part les moteurs qui prennent en charge les quantificateurs possessifs.