1

私は正規表現が苦手ですが、何らかの理由でそれを使用するしかありませんでした。

Webページのテーブルから「ポート番号」とそれぞれの「IPアドレス」のリストを抽出しようとしています。また、AJAX と PHP を使用して動的コンテンツを生成する動的 Web ページであるため、すべてのテーブル要素には ID やクラス、または一意のものはありません。コンテンツ全体に単語とスペースのみが含まれている/t, /r and /nを使用して、すべてを既に削除していました。str_replace

ポートと IP アドレスの例を次に示します。

ポート - Fa0/0、Gi1/0/2.100、Ethernet01、GigaEther-01 (大文字と小文字、ドット、ダッシュ、スラッシュ、数字を含み、16 文字以内、スペースは使用しないでください)

IP アドレス - 123.123.123.123、1.1.12.12、123.12.1.1 (一般的な IP アドレスと違いはありません)

しかし幸いなことに、すべての「ポート」と「IP アドレス」の後に、ポート イメージまたは IP イメージが続きます。

...<img border='0' src='images/port.png' width='18' heigh='18'>Fa0/0</td>... OR
...<img border='0' src='images/ip.png' width='18' heigh='18'>1.1.1.1</td>...

ポート/IP と img/td タグの間にスペースはないと思います。したがって、それらを抽出するためのパターンとして使用できるため、次のパターンを使用しました。

ポート -

$pattern = "/<img border\='0' src='images\/port\.png' width\='18' height\='18'>([a-zA-Z0-9\/ _-]{1,15})<\/td>/";

IP アドレス -

$pattern = "<img border\='0' src\='images\/ip\.png' width\='18' height\='18'>\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b <\/td>/";

が続き preg_match_all($pattern, $content, $matches); ます。. .

しかし、どちらも何も返さないので、次のパターンを試しました。

ポート -

$pattern = "/<img border\='0' src='images\/port\.png' width\='18' height\='18'>(.*)<\/td>/";

IP アドレス -

$pattern = "<img border\='0' src\='images\/ip\.png' width\='18' height\='18'>(.*)<\/td>/";

...

しかし、これらのパターンは次のようなものを返します

<img border\='0' src='images\/port\.png' width\='18' height\='18'>Fa0/0
<\/td>....(Followed by a bunch of unwanted text and code)
......<\/td>

はと(.*)a の間のすべてを有効な一致と見なすためです。<img....></td>

また、特定のIPアドレスの正規表現のみを試してみましたが、$pattern = "/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/";

IPアドレスのみが返されます(111.22.3.119など)が、残念ながらWebページのリンクURLの一部にはIPアドレスも含まれていますが、これは望ましくありません。

それから私は試し$pattern = "/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}<\/td>\b/";ましたが、何も返されません...

これについて私を助けてくれる人に感謝します、ありがとう。

* 編集 1 *

試してみ$pattern = "/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b<\/td>/";ましたが、動作しますが、理由はわかりませんが、ポートの正規表現を解決する方法を考えています....

4

1 に答える 1

0
$pattern1 = '#<img[^>]+>([a-z][\w./-]{1,16})</td>#i';
$pattern2 = '#<img[^>]+>([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})</td>#';
于 2013-07-25T19:30:30.703 に答える