C++使用 Boost Regex 的正则表达式
我试图在 C++ 中获取一个字符串并找到其中包含的所有 IP 地址,并将它们放入一个新的向量字符串中。
我已经阅读了很多有关正则表达式的文档,但我似乎无法理解如何执行这个简单的功能。
我相信我可以使用这个 Perl 表达式来查找任何 IP 地址:
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");
但我仍然不知道如何做其余的事情。
I am trying to take a string in C++ and find all IP addresses contained inside, and put them into a new vector string.
I've read a lot of documentation on regex, but I just can't seem to understand how to do this simple function.
I believe I can use this Perl expression to find any IP address:
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");
But I am still stumped on how to do the rest.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
也许您正在寻找这样的东西。它使用 regex_iterator 来获取当前模式的所有匹配项。请参阅参考。
输出:
旁注:您可能指的是
\\b
而不是\b
;我怀疑你想要匹配退格字符。Perhaps you're looking for something like this. It uses
regex_iterator
to get all matches of the current pattern. See reference.Output:
Side note: you probably meant
\\b
instead of\b
; I doubt you watnted to match backspace character.提供的解决方案非常好,谢谢。虽然我发现模式本身有一个小错误。
例如,像 49.000.00.01 这样的地址将被视为有效的 IPv4 地址,但根据我的理解,它不应该是(只是在某些转储处理过程中发生在我身上)。
我建议将模式改进为:
这应该只允许 0.0.0.0 作为全零输入,我认为这是正确的,它将消除所有 .00。 .000。 ETC。
The offered solution is quite good, thanks for it. Though I found a slight mistake in the pattern itself.
For example, something like 49.000.00.01 would be taken as a valid IPv4 address and from my understanding, it shouldn't be (just happened to me during some dump processing).
I suggest to improve the patter into:
This should allow only 0.0.0.0 as the all-zero-in, which I suppose to be correct and it will eliminate all .00. .000. etc.