2017-06-22 1 views
0

Cettelongue expression regex provoque une erreur

std::regex line("[\s]+\+?[0-9]+.[0-9]+[\s]+\+?[0-9]+.[0-9]+[\s]+\+?[0-9]+.[0-9]+[\s]"); 

ligne provoque cette

Exception thrown at 0x00007FFE39E69E08 in DosyaOkuHizli.exe: Microsoft C++ exception: std::regex_error at memory location 0x000000F751EFEAB0. 
Exception thrown at 0x00007FFE39E69E08 in DosyaOkuHizli.exe: Microsoft C++ exception: [rethrow] at memory location 0x0000000000000000. 
Exception thrown at 0x00007FFE39E69E08 in DosyaOkuHizli.exe: Microsoft C++ exception: std::regex_error at memory location 0x000000F751EFEAB0. 
Unhandled exception at 0x00007FFE39E69E08 in DosyaOkuHizli.exe: Microsoft C++ exception: std::regex_error at memory location 0x000000F751EFEAB0. 

mais cette

std::regex line("abc"); 

ne fonctionne pas.

La longue expression fonctionne ici: https://www.myregextester.com/index.php

Je suis juste essayer d'obtenir 3 valeurs de virgule flottante conséquentes entre autres données.


Visual Studio 2015 édition de la communauté de débogage 64 bits. Windows 10.

+0

Quelle est la chaîne d'entrée? – revo

+0

foo barre somewhitespace +123.324 somewhitespace 33434.4545 somewhitespace -3434.4545 somewhitespace biz baz –

Répondre

3

Vous avez besoin soit d'échapper à l'arrière des barres obliques avec \\ (deux pour un), ou utiliser une chaîne brute littérale comme ceci:

regex line{R"([\s]+\+?[0-9]+.[0-9]+[\s]+\+?[0-9]+.[0-9]+[\s]+\+?[0-9]+.[0-9]+[\s])"}; 

littéraux chaîne brute entourent la chaîne avec (au moins) R"( et )".

En savoir plus sur les littéraux de chaînes brutes HERE - Syntaxe (6).