Посмотрите документацию для регулярных выражений TR1 или (почти эквивалентно) регулярных выражений. Оба прекрасно работают на разных системах Unix. Классы регулярных выражений TR1 были приняты в C ++ 0x, поэтому, хотя они еще не являются частью стандарта, они скоро появятся.
Редактировать: чтобы разбить строку на подгруппы, вы можете использовать sregex_token_iterator. Вы можете указать, что вы хотите сопоставить как токены, или что вы хотите сопоставить как разделители. Вот краткая демонстрация обоих:
#include <iterator>
#include <regex>
#include <string>
#include <iostream>
int main() {
std::string line;
std::cout << "Please enter some words: " << std::flush;
std::getline(std::cin, line);
std::tr1::regex r("[ .,:;\\t\\n]+");
std::tr1::regex w("[A-Za-z]+");
std::cout << "Matching words:\n";
std::copy(std::tr1::sregex_token_iterator(line.begin(), line.end(), w),
std::tr1::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"));
std::cout << "\nMatching separators:\n";
std::copy(std::tr1::sregex_token_iterator(line.begin(), line.end(), r, -1),
std::tr1::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}
Если вы введете это как: «Это какой-то 999 текст», результат будет таким:
Matching words:
This
is
some
text
Matching separators:
This
is
some
999
text