0

特定のWebサイトからすべての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}';
4

3 に答える 3

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;

この警告も参照してください。ただし、単純なhost:portURIの解析には影響しないと思います。

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

最新の修正を入手するには、Indyの現在のリリースをダウンロードすることをお勧めします。

于 2012-12-19T15:13:46.410 に答える
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
于 2012-12-19T13:59:20.070 に答える
0

正規表現は、文字列に関連するすべての問題で手を振る必要がある魔法の杖ではありません。この場合、使用している言語はおそらくURL解析をサポートしています。

PHPでは、関数を使用してURLを解析しますparse_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アドレスを検出するための正規表現がすでに作成されています。

使用している言語が何であれ、誰かがすでにあなたが望むことを実行するコードを作成、デバッグ、テストしています。独自のコードを作成するのではなく、既存のコードを使用してください。

于 2012-12-19T14:29:10.067 に答える