提取IP:PORT

时间:2012-12-19 13:39:29

标签: regex delphi delphi-xe2

如何从一个给定的网站中提取所有IP:PORT?我有这个当前的Regex PATTERN,但我认为它并没有抓住所有...

或者这是一种更好的方法吗?

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}';

2 个答案:

答案 0 :(得分:4)

您可以使用Internet Direct(Indy)单元IdURI代替RegEx。它可以将任何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以获得最新修补程序。

答案 1 :(得分: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地址。

无论您使用何种语言,有人已经编写,调试并测试了已经完成您想要的代码。使用现有代码而不是自己编写代码。