2016-04-01 2 views
1

привет это PCRE регулярное выражение (PHP регулярное выражение)Pcre PHP регулярное выражение равно в C++

/\h*(.*?)\h*[=]\h*("(.*?(?:[\\\\]".*?)*)")\h*([,|.*?])/ 

это регулярное выражение работы для этой строки

data1 = "value 1", data2 = "value 2", data3 = " data4(" hey ") ", 

и получить

data, data2, data3 
val, val2, data4("val3") 

что это регулярное выражение равно в регулярном выражении C++?

+0

жаль я фик его – MyJustWorking

+1

Заменить '\ h' с' \ s'. Если вы используете необработанную строку, используйте '' \\ '' вместо '' \\\\ ''. См. [Это демо] (https://regex101.com/r/vJ3uC4/1). –

ответ

0

Вы должны заменить \h на \s и использовать \\ внутри строкового литерала.

См следующем примере кода:

#include <string> 
#include <iostream> 
#include <regex> 
using namespace std; 

int main() { 
    std::string pat = R"(\s*(.*?)\s*=\s*(\"(.*?(?:[\\]\".*?)*)\")\s*([,|.*?]))"; 
    std::regex r(pat); 
    std::cout << pat << "\n"; 

    std::string s = R"(data1 = "value 1", data2 = "value 2", data3 = " data4(" hey ") ",)"; 
    std::cout << s << "\n"; 
    for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r); 
          i != std::sregex_iterator(); 
          ++i) 
    { 
     std::smatch m = *i; 
     std::cout << "Capture 1: " << m[1].str() << " at Position " << m.position(1) << '\n'; 
     std::cout << "Capture 3: " << m[3].str() << " at Position " << m.position(3) << '\n'; 
    } 
    return 0; 
} 

См IDEONE demo и JS (ECMA5) regex demo

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