2015-07-25 2 views
1

В чем разница между использованием регулярного выражения в C++ и C? Ниже приведен код C++ 11, и ответ, когда я запускаю этот код, является «несоответствие», но для кода C он «соответствует».В чем разница между C++ и C regex

Существуют ли какие-либо правила или документы, которые точно описывают эти различия?

C++ код:

#include <regex> 
#include <stdio.h> 
using namespace std; 
int main() 
{ 

     const std::regex re("^@hithere"); 
     std::smatch match; 
     std::string str ("@hithere"); 
     if(std::regex_match(str, match,re) && match.size()>1) 
     { 
       printf("match\n"); 
     } 
     else 
     { 
       printf("mismatch\n"); 
     } 


} 
output: mismatch 

код C:

#include <regex.h> 
#include <stdio.h> 
int main() 
{ 
     int reti; 
     regex_t regex; 

     reti = regcomp(&regex, "^@hithere", REG_EXTENDED); 
     if(!reti) 
     { 
       printf("compile success\n"); 

     } 

     reti = regexec(&regex, "@hithere", 0, NULL, 0); 
     if(!reti) 
     { 
       printf("match\n"); 
     } 
     else 
     { 

       printf("mis match\n"); 
     } 


} 
output:match 
+0

Это две различные реализации регулярных выражений. '' определяется POSIX (не по ISO C); '' определяется ISO C++. –

ответ

1

Причина заключается в том, что у вас нет каких-либо захватив группы в регулярных выражениях, и у вас есть чек, если есть по крайней мере один с

&& match.size()>1 

изменить его на

&& match.size()==1 

И вы получите expected result.

См std::match_results::size reference:

Возврат количество матчей
Возвращает количество матчей и подразделам матчей в match_results объекта.

+0

Спасибо, stribizhev –

Смежные вопросы