スマソ。わざわざboost::regexとか使うまでもなかったわ。

vector<string> split_csv(const string& s)
{
  vector<char> col;
  vector<string> result;
  int i = 0;
  char c;

  while (i < s.size()) {
    c = s[i++];
    if (c == '"') {
CONTINUE:
      while (i < s.size() && (c = s[i++]) && c != '"')
        col.push_back(c);
      if (i < s.size() && s[i] == '"') {
        col.push_back(s[i++]);
        goto CONTINUE;
      }
    } else if (c == ',') {
      result.push_back(string(col.begin(), col.end()));
      col.clear();
    } else
      col.push_back(c);
  }
  if (col.size() > 0)
    result.push_back(string(col.begin(), col.end()));
  return result;
}