请教一个获取 ip 地址的正则问题

2020-08-12 22:44:07 +08:00
 JCZ2MkKb5S8ZX9pq
1865 次点击
所在节点    正则表达式
9 条回复
calmzhu
2020-08-12 22:59:13 +08:00
意思是只要<td>标签的 text 部分内容?

如果是的话,正则前后加个零宽断言试试,类似这样
(?=<)(\d+\.\d+\.\d+\.\d+).+?(\d+)
calmzhu
2020-08-12 23:01:04 +08:00
@calmzhu

尖括号反了。
(?=>)\s?(\d+\.\d+\.\d+\.\d+).+?(\d+)

然后零宽断言记得是正则的扩展,不同语言工具支持语法好像有差别,可能需要调试下
JCZ2MkKb5S8ZX9pq
2020-08-12 23:05:53 +08:00
@calmzhu
未必在 td 里,另外你前面的零宽是不是指 td 右侧的括号?(?<=>)
JCZ2MkKb5S8ZX9pq
2020-08-12 23:07:00 +08:00
@calmzhu 就是有一些含 html 的情况,也有不含的,想搞个通用的。
calmzhu
2020-08-12 23:13:34 +08:00
标签不是 TD 也没关系。就是通过寻找 IP 地址前面第一个非空字符是>的匹配字符串。

但是非 HTML 就不匹配了。

通用的话,可能需要文本有规律,让后再考虑把规律翻译成正则。
JCZ2MkKb5S8ZX9pq
2020-08-12 23:22:34 +08:00
@calmzhu 先在前面加了[>\s]凑合一下
JCZ2MkKb5S8ZX9pq
2020-08-12 23:39:01 +08:00
@JCZ2MkKb5S8ZX9pq 不过实际试下来,前缀种类有点多,最好还是能去后缀,或者去重。
Dvel
2020-08-12 23:42:20 +08:00
(\d+\.\d+\.\d+\.\d+).+?((?<!\.)\d+(?!\.|\d))

这样呢,缺点是如果 IP 和端口号之间有任意数字就不管用了。
JCZ2MkKb5S8ZX9pq
2020-08-13 00:13:33 +08:00
@Dvel 对对对
我一开始 (?!\.|\d) 这个没写对,老是排除错误。

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

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

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

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

© 2021 V2EX