想要获取的是代理服务器,包括 ip 和 port 。
简单的类似
(?s)(\d+\.\d+\.\d+\.\d+).+?(\d+)
这样粗暴的方式我是知道的。(偶尔有多行的情况)
" 123.1.1.1 8080 " 这种是能捕获到的
" <td param='123.1.1.1'>123.1.1.1</td><td>8080</td> "
请问这种有重复部分的,不想用 xpath,直接用正则怎么规避 '123.1.1.1:123' 这类结果。
1
calmzhu 2020-08-12 22:59:13 +08:00
意思是只要<td>标签的 text 部分内容?
如果是的话,正则前后加个零宽断言试试,类似这样 (?=<)(\d+\.\d+\.\d+\.\d+).+?(\d+) |
2
calmzhu 2020-08-12 23:01:04 +08:00
|
3
JCZ2MkKb5S8ZX9pq OP @calmzhu
未必在 td 里,另外你前面的零宽是不是指 td 右侧的括号?(?<=>) |
4
JCZ2MkKb5S8ZX9pq OP @calmzhu 就是有一些含 html 的情况,也有不含的,想搞个通用的。
|
5
calmzhu 2020-08-12 23:13:34 +08:00
标签不是 TD 也没关系。就是通过寻找 IP 地址前面第一个非空字符是>的匹配字符串。
但是非 HTML 就不匹配了。 通用的话,可能需要文本有规律,让后再考虑把规律翻译成正则。 |
6
JCZ2MkKb5S8ZX9pq OP @calmzhu 先在前面加了[>\s]凑合一下
|
7
JCZ2MkKb5S8ZX9pq OP @JCZ2MkKb5S8ZX9pq 不过实际试下来,前缀种类有点多,最好还是能去后缀,或者去重。
|
8
Dvel 2020-08-12 23:42:20 +08:00 1
(\d+\.\d+\.\d+\.\d+).+?((?<!\.)\d+(?!\.|\d))
这样呢,缺点是如果 IP 和端口号之间有任意数字就不管用了。 |
9
JCZ2MkKb5S8ZX9pq OP @Dvel 对对对
我一开始 (?!\.|\d) 这个没写对,老是排除错误。 |