在网上搜如何从字符串中提取 ip 地址,出来的全都是正则的实现。我想找一个不用正则的实现,支持 IPv4 和 IPv6 的提取,请大佬们指条明道
1
hanxiV2EX 2020-09-28 00:13:41 +08:00 via Android
ipv4 可以遍历查找数字和点
|
2
mikeguan 2020-09-28 00:26:36 +08:00 via Android
查找应该都算是用了正则
|
3
lxilu 2020-09-28 00:30:46 +08:00 via iPhone
找个正则调试器,看正则是怎么运行的
|
4
leishi1313 2020-09-28 01:14:53 +08:00 via Android
那你把正则展开成 if else 不就行了😂
|
5
binux 2020-09-28 05:04:52 +08:00 via Android 3
手写正则文法解析器呗
|
6
raaaaaar 2020-09-28 07:19:06 +08:00 via Android
先造一个正则的轮子,然后给它取名字为“反则”
|
7
xJogger 2020-09-28 07:59:15 +08:00 via Android
找一个阿三程序员替你找。
|
8
Rxianbei 2020-09-28 08:22:29 +08:00 via Android 1
emmm,先生成 1.1.1.1 到 255.255.255.255 的所有有可能的 ipv4 地址入库,然后再进行文本循环匹配,欧耶
|
11
xiri 2020-09-28 09:05:11 +08:00
为什么不能用正则呢?正则底层也是很多的 if else 啊
|
12
oneisall8955 2020-09-28 09:26:05 +08:00 via Android
emm...不熟悉正则还是怎么的。实现需求来说,搜索引擎答案大多推荐一个方案那么他是比较好实现且坑少,方案成熟,有 bug 也容易修复,不熟悉可以学习。如果单纯自己学习,尝试其他方法实现,应该可以造轮子,写一个算法获取字符串中的所有 0-9 和.的子字符串,每个进行 IP 规则匹配就行(.分割后 0~255 等规则)
|
13
jjplay 2020-09-28 09:26:23 +08:00
IPV4 匹配 字符串 "." , 然后搜该 "." 的下 1-3 位字符是不是(0-255)的数字,如此循环匹配 3 次
IPV6 匹配 字符串 ":" , 同上,缩写匹配字符串 "::" |
14
glfpes 2020-09-28 09:27:57 +08:00 via iPhone
要是老板给我提这个需求,第一件事我要做的就是问他为啥不能用正则。
|
15
abc0123xyz 2020-09-28 09:30:48 +08:00
雇几个视力还行的老头老太太,简单教一下,人眼识别。。
|
16
chinvo 2020-09-28 09:34:39 +08:00 via iPhone
炼丹,生成随机假文本,然后随机在假文本中插入 IP 地址,最后一股脑喂给一个三层的网络,运气好的话比雇几个老头老太太要准一点
|
17
netnr 2020-09-28 09:35:06 +08:00
抛弃最佳解决问题的方法,需要付出代价
|
18
Hyseen 2020-09-28 09:40:43 +08:00
|
19
ysc3839 2020-09-28 09:46:05 +08:00 via Android
去看编译原理,根据网上找到的正则表达式实现对应的自动机。
|
20
dtgxx 2020-09-28 09:48:40 +08:00
你弄懂什么是流式处理了吗
|
21
zu1k OP @Hyseen 目前是这个想法,不知道工作量大不大,太大我就放弃了,牺牲计算机 cpu 来换我不秃头
@netnr 的确,目前关研究这个事就够烦人的了 @chinvo 炼金师 VS 老太太 @jjplay 实际深入到细节,还是有一些坑 @oneisall8955 目前用的正则,已经能够实现目前的需求了,但是我想重构后让我的程序功能和效率更加强大一些,也算是学习了吧 @xiri @leishi1313 我不想用递归下降了,我想查表 @lxilu 有这个想法了 |
22
zu1k OP |
23
ysc3839 2020-09-28 10:18:24 +08:00
@zu1k 个人理解流式处理是针对磁带机等无法进行随机存取的设备提出的,和批处理没关系,批处理是早期操作系统执行任务的概念。
https://zh.wikipedia.org/wiki/%E6%89%B9%E5%A4%84%E7%90%86%E4%BB%BB%E5%8A%A1 |