如何从字符串中提取 ip 地址(不用正则)

2020-09-27 23:58:32 +08:00
 zu1k

在网上搜如何从字符串中提取 ip 地址,出来的全都是正则的实现。我想找一个不用正则的实现,支持 IPv4 和 IPv6 的提取,请大佬们指条明道

2741 次点击
所在节点    问与答
23 条回复
hanxiV2EX
2020-09-28 00:13:41 +08:00
ipv4 可以遍历查找数字和点
mikeguan
2020-09-28 00:26:36 +08:00
查找应该都算是用了正则
lxilu
2020-09-28 00:30:46 +08:00
找个正则调试器,看正则是怎么运行的
leishi1313
2020-09-28 01:14:53 +08:00
那你把正则展开成 if else 不就行了😂
binux
2020-09-28 05:04:52 +08:00
手写正则文法解析器呗
raaaaaar
2020-09-28 07:19:06 +08:00
先造一个正则的轮子,然后给它取名字为“反则”
xJogger
2020-09-28 07:59:15 +08:00
找一个阿三程序员替你找。
Rxianbei
2020-09-28 08:22:29 +08:00
emmm,先生成 1.1.1.1 到 255.255.255.255 的所有有可能的 ipv4 地址入库,然后再进行文本循环匹配,欧耶
jay4497
2020-09-28 08:35:43 +08:00
@Rxianbei 他还要 IPv6 的 [:doge:]
zxCoder
2020-09-28 08:57:11 +08:00
@jay4497 没问题,就多几位 🐕
xiri
2020-09-28 09:05:11 +08:00
为什么不能用正则呢?正则底层也是很多的 if else 啊
oneisall8955
2020-09-28 09:26:05 +08:00
emm...不熟悉正则还是怎么的。实现需求来说,搜索引擎答案大多推荐一个方案那么他是比较好实现且坑少,方案成熟,有 bug 也容易修复,不熟悉可以学习。如果单纯自己学习,尝试其他方法实现,应该可以造轮子,写一个算法获取字符串中的所有 0-9 和.的子字符串,每个进行 IP 规则匹配就行(.分割后 0~255 等规则)
jjplay
2020-09-28 09:26:23 +08:00
IPV4 匹配 字符串 "." , 然后搜该 "." 的下 1-3 位字符是不是(0-255)的数字,如此循环匹配 3 次
IPV6 匹配 字符串 ":" , 同上,缩写匹配字符串 "::"
glfpes
2020-09-28 09:27:57 +08:00
要是老板给我提这个需求,第一件事我要做的就是问他为啥不能用正则。
abc0123xyz
2020-09-28 09:30:48 +08:00
雇几个视力还行的老头老太太,简单教一下,人眼识别。。
chinvo
2020-09-28 09:34:39 +08:00
炼丹,生成随机假文本,然后随机在假文本中插入 IP 地址,最后一股脑喂给一个三层的网络,运气好的话比雇几个老头老太太要准一点
netnr
2020-09-28 09:35:06 +08:00
抛弃最佳解决问题的方法,需要付出代价
Hyseen
2020-09-28 09:40:43 +08:00
不用正则的话就自己写个 DFA 吧
ysc3839
2020-09-28 09:46:05 +08:00
去看编译原理,根据网上找到的正则表达式实现对应的自动机。
dtgxx
2020-09-28 09:48:40 +08:00
你弄懂什么是流式处理了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/711091

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX