Вопрос в том, как именно вы хотите сопоставить их, и что еще вы хотите исключить?
Тривиально (но редко полезно) сопоставлять любую входящую строку с простой .*
.
Для более точного соответствия (и добавления возможности извлечения таких вещей, как имя пользователя и / или IP), вы можете использовать что-то вроде: "User ([^,]*), IP: (\\d{1,3}(\\.\\d{1,3}){3})"
. В зависимости от вашего ввода, это может по-прежнему сталкиваться с проблемой с именем, которое содержит запятую (например, «Джон Джеймс, младший»). Если вы должны это учесть, то в спешке это становится немного ужаснее.
Edit: вот немного кода для проверки / демонстрации регулярного выражения выше. На данный момент, это использует класс (ы) регулярных выражений C ++ 0x - чтобы использовать Boost, вам нужно немного изменить пространства имен (но я считаю, что это должно быть у всех).
#include <regex>
#include <iostream>
void show_match(std::string const &s, std::regex const &r) {
std::smatch match;
if (std::regex_search(s, match, r))
std::cout << "User Name: \"" << match[1]
<< "\", IP Address: \"" << match[2] << "\"\n";
else
std::cerr << s << "did not match\n";
}
int main(){
std::string inputs[] = {
std::string("User JaneDoe, IP: 12.34.56.78"),
std::string("User JohnDoe, IP: 34.56.78.90")
};
std::regex pattern("User ([^,]*), IP: (\\d{1,3}(\\.\\d{1,3}){3})");
for (int i=0; i<2; i++)
show_match(inputs[i], pattern);
return 0;
}
Это распечатывает имя пользователя и IP-адрес, но в (едва) достаточно различном формате, чтобы было ясно, что он сопоставляет и распечатывает отдельные фрагменты, а не просто пропускает целые строки.