我有一个字符串
"server ('m1.labs.teradata.com') username ('user5') password ('user)5') dbname ('default') "
我想把它分开为
string1 = server
string2 = 'm1.labs.teradata.com'
和密码有')'在里面。 任何人都可以帮我解决如何使用正则表达式来使用它。??
答案 0 :(得分: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
}
对于将字符串传递给函数的其他查询:
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
第二个版本确实需要为std :: strings调用c_str():
print("Hello World!\n"); // No temporary is made
std::string someString = //...
print(someString.c_str()); // No temporary is made