2012-12-19 99 views
0

如何從給定網站提取所有IP:PORT?我有這個當前的正則表達式模式,但我認爲它並沒有全部取得。提取IP:端口

或者它是一個更好的方法嗎?

PATTERN = '((?:1?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:1?\d{1,2}|2[0-4]\d|25[0-5]):\d{2,5}'; 
+0

你爲什麼回滾Delphi標籤?它根本不是Delphi相關的! – TLama

+0

在RegEx上特定的Delphi是什麼? – TLama

+0

是的,關於更新的通知(添加*「或者它是一種更好的方法來提取IP:PORT在Delphi中?」,這反過來改變了原來的問題)是在我發佈該評論之後發佈的。 – TLama

回答

3

這將工作,如果有總是一個端口的IP如下:

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\:\d{2,5}\b 

匹配:

1.2.3.4:80 
001.002.003.004:2345 
255.255.255.255:13245 

不匹配:

1.2.3 
1.2.3:01 
1.2.3.4.5:99 
299.299.299.299:123 
+2

你的第二個反例是一個有效的IP地址和端口。 IPv4地址中不一定有四個組件。 –

0

正則表達式不是一個魔杖,你應該在與琴絃有關的每一個問題上揮動。在這種情況下,您使用的語言可能支持URL解析。

在PHP中,您使用parse_url()函數解析URL。 http://php.net/manual/en/function.parse-url.php

在Perl中,您使用URI :: URL類http://search.cpan.org/dist/URI/

如果你真的想用一個正則表達式,Perl的模塊http://search.cpan.org/dist/Regexp-Common/已建正則表達式爲你檢測到IP地址。

無論您使用何種語言,都有人已經編寫,調試並測試過已經做到了您想要的代碼。使用現有的代碼而不是編寫自己的代碼。

+0

我的意思是特意在Delphi中。我知道它是如何完成在PHP .. –

+1

然後也許這可以幫助你http://stackoverflow.com/questions/124170/a-delphi-freepascal-lib-or-function-that-emulates-the-phps-function- parse-url –

4

除了RegEx,您可以使用Internet Direct(Indy)設備IdURI。它可以將任何URI解析爲其協議部分。它支持IPv4和IPv6。該單位相當獨立。

MyURI := TIdURI.Create('http://127.0.0.1:8080'); 
try 
    MyHost := MyURI.Host; 
    MyPort := MyURI.Port; 
finally 
    MyURI.Free; 
end; 

屬性暴露有關URI的詳細信息:

property Bookmark : string read FBookmark write FBookMark; 
property Document: string read FDocument write FDocument; 
property Host: string read FHost write FHost; 
property Password: string read FPassword write FPassword; 
property Path: string read FPath write FPath; 
property Params: string read FParams write FParams; 
property Port: string read FPort write FPort; 
property Protocol: string read FProtocol write FProtocol; 
property URI: string read GetURI write SetURI; 
property Username: string read FUserName write FUserName; 
property IPVersion : TIdIPVersion read FIPVersion write FIPVersion; 

又見這樣的警告,但我認爲這不會影響簡單的主機:端口URI解析:

https://stackoverflow.com/a/502011/80901

我建議下載最新版本的Indy以獲得最新修復程序。

+0

你可以發佈如何使用IdURI從給定的HTML代碼中提取IP:PORT。如果它更友善,那麼這可能是更好的解決方案。但我從來沒有這樣做過,爲什麼評論。 –

+1

+1。非常好。 (它沒有回答問題的提問,但仍然是一個很好的建議。) –

+0

是的,它不需要對問題做任何事情。這是爲了解析單個字符串到IP,PORT等。我要求解析IP代碼的HTML代碼:PORT匹配。 –