1

我是正则表达式的新手——我在 C++ 中使用 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 地址并将它们添加到字符串向量中。

4

2 回答 2

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");
于 2011-04-29T19:40:40.450 回答
0

为什么不直接使用 C POSIX 正则表达式?这是文档:

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

除此之外,这里究竟出了什么问题?您没有指定实际问题。我不熟悉您正在使用的课程,但看起来没有什么明显损坏,除了我们不知道 IPlist 是什么。它似乎是一个列表,但被设置为等于单个字符串值。我怀疑那里的逻辑可能是不可取的。

于 2011-04-29T18:41:38.467 回答