【问题标题】:C++ Regular ExpressionsC++ 正则表达式
【发布时间】:2011-04-27 05:57:10
【问题描述】:

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

【问题讨论】:

标签: c++ regex poco-libraries


【解决方案1】:

表达式可以缩短,\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");

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多