我遵循正则表达式来匹配输入字符串上的HTTP标头和正文:
([^()<>@,;:\\\"/\\[\\]?={}\\s\\t]+):(?:[\\s\\t]+)?(.+)\\r\\n(?:\\r\\n([\\s\\S]+))?
圆括号显示预期的匹配:
(Header-Name): (Its_value)
(Im-a-header): (Im_a_value)
(Anything here,
commonly HTML code...
...)
使用PCRE,Python或JavaScript版本在Regex101.com中工作正常,但是当我使用regex_search
在C ++中测试它时,只有第一个头匹配,甚至不再是主体。使用来自boost::regex
的Perl风格会产生更奇怪的输出。
测试代码:
#include <regex>
#include <string>
#include <iostream>
int main()
{
const std::string data("Name: value\r\nFoo: bar\r\n\r\nanything\r\nhere");
std::regex pattern("([^()<>@,;:\\\"/\\[\\]?={}\\s\\t]+):(?:[\\s\\t]+)?(.+)\\r\\n(?:\\r\\n([\\s\\S]+))?");
std::smatch result;
std::regex_search(data, result, pattern);
for(const auto &match : result)
std::cout << match << std::endl;
}
输出:
Name: value
Name
value
输出从std
更改为boost
(并自动更改为Perl风格):
Name: value
Foo: bar
anything here
Name
value
Foo: bar
anything here
Obs。:我仅使用boost
来测试结果输出。我不想要任何Perl特定的解决方案。
我希望使用以下代码获得类似于以下内容的输出:
Name
value
Foo
bar
anything
here
有人可以理解这是什么问题并帮助我吗?
答案 0 :(得分:1)
似乎有几个问题。
Item[0]
以获得每个havinf捕获组的几个匹配项。echo $xml->Items->Item[0]->OfferSummary->TotalNew->__toString();
放入第3组,您应该在尝试打印/获取之前检查它是否已填写。这是一个固定版本:
regex_search
见IDEONE demo。输出:
anything\r\nhere