Регулярные выражения С++

Я новичок в регулярных выражениях - я использую Poco на С++ для извлечения IP-адресов из строки и (пытаюсь) поместить все совпадения IP в строковый вектор:

string result = tcpClient.receiveRaw();

RegularExpression re("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");

RegularExpression::MatchVec matches;
re.match(result, 0, matches);

IPlist = result.substr(matches[1].offset, matches[1].length);

Я не думаю, что последняя строка верна (не знаю, как она работает). Я пытаюсь извлечь все IP-адреса из этой исходной строки и добавить их в вектор строки.


person alyx    schedule 27.04.2011    source источник
comment
Я не знаю о Поко. Но я бы предложил посмотреть регулярные выражения boost boost.org/doc/libs/1_46_1/libs/regex/doc/html/index.html   -  person Mihran Hovsepyan    schedule 27.04.2011
comment
@ChristianSeverin Имейте в виду, что каждое ваше редактирование выдвигает вопрос на первую страницу и может создать много шума. Если вы считаете, что повторная пометка должна произойти, сначала спросите об этом в метате.   -  person JAL    schedule 10.11.2015


Ответы (2)


Выражение можно сократить, и \b, вероятно, нуждается в другом переходе (но я не знаком с Poco, поэтому могу ошибаться). Попробуйте это:

RegularExpression re("\\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");
person ridgerunner    schedule 29.04.2011

Почему бы просто не использовать регулярные выражения C POSIX в ? Вот документация:

http://pubs.opengroup.org/onlinepubs/007908799/xsh/regcomp.html

Кроме того, что здесь на самом деле не так? Вы не указали реальную проблему. Я не знаком с используемым вами классом, но ничего явно не сломано, за исключением того, что мы не знаем, что такое IPlist. Похоже, что это список, но он устанавливается равным одному строковому значению. Я подозреваю, что логика там может быть нежелательной.

person pattivacek    schedule 29.04.2011