如何从给定网站中提取所有 IP:PORT? 我有这个当前的正则表达式模式,但我认为它并没有抓住所有..
或者这是一个更好的方法吗?
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}';
如何从给定网站中提取所有 IP:PORT? 我有这个当前的正则表达式模式,但我认为它并没有抓住所有..
或者这是一个更好的方法吗?
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}';
您可以使用 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;
另请参阅此警告,但我认为它不会影响简单的 host:port URI 解析:
https://stackoverflow.com/a/502011/80901
我建议下载当前版本的 Indy 以获得最新修复。
如果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
正则表达式不是你应该在与字符串有关的每个问题上挥舞的魔杖。在这种情况下,您使用的语言可能支持 URL 解析。
parse_url()
在 PHP 中,您使用该函数解析 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 地址。
无论您使用哪种语言,有人已经编写、调试和测试了已经可以满足您需求的代码。使用现有代码而不是编写自己的代码。