如何从一个给定的网站中提取所有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}';
答案 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地址。
无论您使用何种语言,有人已经编写,调试并测试了已经完成您想要的代码。使用现有代码而不是自己编写代码。