C ++ Регулярные выражения - PullRequest
       20

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

1 голос
/ 27 апреля 2011

Я новичок в регулярных выражениях - я использую Poco в C ++ для извлечения 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-адреса из этой исходной строки и добавить их в строковый вектор.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Выражение может быть сокращено, и \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");
0 голосов
/ 29 апреля 2011

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

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

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

...