2017-05-04 49 views
-1

我有一個字符串一個標記化用串C++

"server ('m1.labs.teradata.com') username ('user5') password ('user)5') dbname ('default') " 

我想將它單獨作爲

string1 = server 
string2 = 'm1.labs.teradata.com' 

和密碼 ')' 在它具有。 任何人都可以幫助我瞭解如何使用正則表達式。

+0

Cou你是否請顯示你當前的代碼? –

+0

我沒有。需要寫一個 – user6511542

+2

是的,你這樣做。在發佈[mcve]後,我們可以提供幫助,但我們不是代碼編寫服務。 –

回答

0

我只測試了正則表達式來提取您的項目,但我認爲下面的代碼片段將工作。

#include <regex> 
#include <iostream> 

int main() 
{ 
    const std::string s = "server ('m1.labs.teradata.com') username ('user5') password ('user)5') dbname ('default') "; 
    std::regex rgx("server\s+\(\'[^']+\'\)\s+username\s+(\'[^']+\'\)\s+password\s+\(\'[^']*\'\)\s+dbname\s+\(\'[^']+\'\)"); 
    std::smatch match; 

    if (std::regex_search(s.begin(), s.end(), match, rgx)) { 
     std::cout << "match: " << match[1] << '\n'; 
     std::cout << "match: " << match[2] << '\n'; 
     .... 
    } 
} 

在以下示例中,您將遍歷正則表達式中的所有匹配項。

#include <iostream> 
#include <string> 
#include <regex> 

int main() 
{ 
    std::string str("server ('m1.labs.teradata.com') username ('user5') password ('user)5') dbname ('default') "); 
    std::regex r("server\s+\(\'[^']+\'\)\s+username\s+(\'[^']+\'\)\s+password\s+\(\'[^']*\'\)\s+dbname\s+\(\'[^']+\'\)"); 
    std::smatch m; 
    std::regex_search(str, m, r); 
    for(auto v: m) std::cout << v << std::endl; // Here you will iterate over all matches 
} 

爲其他querstion與傳遞字符串的函數:

void print(const std::string& input) 
{ 
    cout << input << endl; 
} 
or a const char*: 

void print(const char* input) 
{ 
    cout << input << endl; 
} 

兩種方式都允許你這樣稱呼它:

print("Hello World!\n"); // A temporary is made 
std::string someString = //... 
print(someString); // No temporary is made 

第二個版本確實需要c_str()被稱爲std :: strings:

print("Hello World!\n"); // No temporary is made 
std::string someString = //... 
print(someString.c_str()); // No temporary is made 
+0

你在哪個cpp版本上運行它。我越來越\ s,\作爲未知的轉義字符..? – user6511542

+0

我需要提取字符串「服務器」「用戶名」等。我該怎麼做?並輸出爲您的代碼是: 匹配:'m1.lab(s.teradata.com' 匹配: 爲什麼我沒有得到其他?我用了以下代碼: int main() {const std ('user5')password('user)5')dbname('default')「; std :: regex rgx(」 \(\'[^'] + \'\)「); std :: smatch match; if(std :: regex_search(s.begin(),s.end(),match,rgx)){ std :: cout <<「match:」<< match [1] <<'\ n'; std :: cout <<「match:」<< match [2] <<'\ n'; } } – user6511542

+0

那麼你需要雙倍轉義它像\\ s + –