В документации вы можете найти простую функцию сопоставления:
std::pair<iterator, bool>
match_whitespace(iterator begin, iterator end)
{
iterator i = begin;
while (i != end)
if (std::isspace(*i++))
return std::make_pair(i, true);
return std::make_pair(i, false);
}
В этом случае он соответствует любому пробелу (измените std :: isspace в соответствии с тем, что вы хотите). Опять же, в этой документации вы можете увидеть более сложное событие, оно потребляет поток, пока не найдет определенный символ:
class match_char
{
public:
explicit match_char(char c) : c_(c) {}
template <typename Iterator>
std::pair<Iterator, bool> operator()(
Iterator begin, Iterator end) const
{
Iterator i = begin;
while (i != end)
if (c_ == *i++)
return std::make_pair(i, true);
return std::make_pair(i, false);
}
private:
char c_;
};
И код для использования этого класса:
// Function used for error handling
void handler(const boost::system::error_code& e, std::size_t size)
{
// Do something
}
// Example of call, it reads from inputStream to outputStreamBuff
// until the specified delimiter (";") is found
boost::asio::async_read_until(inputStream, outputStreamBuff,
match_char(';'), handler);