Шаблон функции boost::algorithm::split_regex
разбивает одну строку на строки в подстроке исходной строки, которая соответствует шаблону регулярного выражения, который мы передали в split_regex
. Вопрос в том, как я могу разделить его только один раз на первую подстроку, которая соответствует? То есть, можно сделать остановку split_regex
после ее первого расщепления? См. Следующие коды.Как split_regex только один раз?
#include <boost/algorithm/string/regex.hpp>
#include <boost/format.hpp>
#include <boost/regex.hpp>
#include <iostream>
#include <locale>
int main(int argc, char *argv[])
{
using namespace std;
using boost::regex;
locale::global(locale(""));
// Create a standard string for experiment.
string strRequestLine("Host: 192.168.0.1:12345");
regex pat(R"(:\s*)", regex::perl | boost::regex_constants::match_stop);
// Try to split the request line.
vector<string> coll;
boost::algorithm::split_regex(coll, strRequestLine, pat);
// Output what we got.
for (const auto& elt : coll)
cout << boost::format("{%s}\n") % elt;
// Exit the program.
return 0;
}
Где должны быть изменены коды, чтобы иметь выход как
{Host}
{192.168.0.1:12345}
вместо выходного тока
{Host}
{192.168.0.1}
{12345}
Любое предложение/намек? Благодарю.
Обратите внимание, что я не спрашиваю, как это сделать с другими функциями или шаблонами. Я спрашиваю, возможно ли для split_regex
разделить только один раз, а затем остановиться. Поскольку объект regex
, кажется, имеет возможность остановиться при первом совпадении, мне интересно, что если вы предлагаете ему некоторые правильные флаги, возможно, он остановится при первом совпадении.
бы "POSN = strRequestLine.find_first_of (":»); быть полезным? –
Вышеприведенный код - это просто демонстрация моего вопроса. Интересно, может ли 'split_regex' остановиться при первом найденном шаблоне. Я знаю, как выполнить задачу по-другому, прежде чем публиковать этот вопрос. Меня интересует только использование функции split_regex. Спасибо, в любом случае. – Cody
Возможно, вас заинтересует первый образец, который я перечислил ** [здесь] (http://stackoverflow.com/questions/26902755/skipping-blank-lines-when-reading-line-delimited-list-of-strings/26906134 # comment42375456_26906134) **: [малая функция разбора заголовков HTTP-ответов] (http://paste.ubuntu.com/8989134/). Описание: используйте 'phrase_parse (f, e, token >> ':' >> lexeme [* (char_ - eol)], пробел, ключ, значение)' – sehe