【发布时间】:2017-12-29 16:33:30
【问题描述】:
我有以下代码:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
string s;
s = "server ('m1.labs.terad ''ata.com') username ('us\* er5') password('user)5') dbname ('def\\ault')";
regex re("('[^']*(?:''[^']*)*')");
// I have used -1 to extract everything apart from the content there in brackets.
sregex_token_iterator i(s.begin(), s.end(), re, -1);
sregex_token_iterator j;
unsigned count = 0;
while(i != j)
{
cout <<*i<< endl;
count++;
i++;
}
cout << "There were " << count << " tokens found." << endl;
return 0;
}
上面的正则表达式用于提取参数名称,例如服务器、用户名、密码等。
但这是我得到的输出:
server (
) username (
) password(
) dbname (
)
There were 5 tokens found.
但我期待的输出是:
server
username
password
dbname
There were 4 tokens found.
请在我错过的地方帮助我。提前致谢
【问题讨论】:
-
同样,您的输入字符串文字中有一个多余的反斜杠。请提供您正在处理的文字字符串。除了例子,请制定口头规则进行提取。一旦你这样做了,你就不必问几乎相同的问题了。
-
更改您的正则表达式,使其匹配您想要提取的内容,而不是您想要丢弃的内容。您可以使用捕获组或环视。
-
简短问题:如果您使用的是
std::regex而不是boost::regex,为什么这个标签是boost?还是我错过了什么? -
@muXXmit2X 在我的代码中 sregex_token_iterator 属于 boost 。这就是我使用的原因。
-
@WiktorStribiżew 我的表述非常好,究竟是什么预期的,我认为没有多余的反斜杠。这就是我的输入的样子