我有一個字符串一個標記化用串C++
"server ('m1.labs.teradata.com') username ('user5') password ('user)5') dbname ('default') "
我想將它單獨作爲
string1 = server
string2 = 'm1.labs.teradata.com'
和密碼 ')' 在它具有。 任何人都可以幫助我瞭解如何使用正則表達式。
我有一個字符串一個標記化用串C++
"server ('m1.labs.teradata.com') username ('user5') password ('user)5') dbname ('default') "
我想將它單獨作爲
string1 = server
string2 = 'm1.labs.teradata.com'
和密碼 ')' 在它具有。 任何人都可以幫助我瞭解如何使用正則表達式。
我只測試了正則表達式來提取您的項目,但我認爲下面的代碼片段將工作。
#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
你在哪個cpp版本上運行它。我越來越\ s,\作爲未知的轉義字符..? – user6511542
我需要提取字符串「服務器」「用戶名」等。我該怎麼做?並輸出爲您的代碼是: 匹配:'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
那麼你需要雙倍轉義它像\\ s + –
Cou你是否請顯示你當前的代碼? –
我沒有。需要寫一個 – user6511542
是的,你這樣做。在發佈[mcve]後,我們可以提供幫助,但我們不是代碼編寫服務。 –