我正试图从网站上抓取一些代理地址。我从来没有深入学习正则表达式。有一些常见的格式,这里是正在使用的正则表达式
Regex ip = new Regex(@"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?:\t*)(?: *)(?::*)(\d{2,5})");
不同的网站使用不同的格式,可能是8.8.8.8 \ t \ t 80,8.8.8.8:80,8.8.8.8 \ t80
这个正则表达式能够捕获大部分地址,但显然它会将123.123.123.123与ip 123.123.123.1和端口23不匹配,如果ip地址后面没有被三个元素之一分隔的端口
我希望三个共同元素\ t \ t,space,:为零或更多,但三个中至少有一个出现。
我想到了消极的前瞻,但我太习惯了,不能好好利用。
有任何暗示吗?
答案 0 :(得分:3)
如果你对123.123.123.123 : :: : 80
等地址没问题,那么你可以使用以下内容:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[ \t:]+(\d{2,5})
如果您只想匹配123.123.123.123 : 80
,123.123.123.123 80
,123.123.123.123:80
(最多一个:
)等地址,那么您可以预见。
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?=[^\d])\s*:?\s*(\d{2,5})
或者您可以使用or
操作:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?:\s+|\s*:\s*)(\d{2,5})