正则表达式匹配分离的代理ip和端口

时间:2014-05-30 03:40:33

标签: regex proxy

我正试图从网站上抓取一些代理地址。我从来没有深入学习正则表达式。有一些常见的格式,这里是正在使用的正则表达式

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,:为零或更多,但三个中至少有一个出现。

我想到了消极的前瞻,但我太习惯了,不能好好利用。

有任何暗示吗?

1 个答案:

答案 0 :(得分:3)

如果你对123.123.123.123 : :: : 80等地址没问题,那么你可以使用以下内容:

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[ \t:]+(\d{2,5})

Regular expression visualization

如果您只想匹配123.123.123.123 : 80123.123.123.123 80123.123.123.123:80(最多一个:)等地址,那么您可以预见。

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?=[^\d])\s*:?\s*(\d{2,5})

Regular expression visualization

或者您可以使用or操作:

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?:\s+|\s*:\s*)(\d{2,5})

Regular expression visualization