私は正規表現が苦手ですが、何らかの理由でそれを使用するしかありませんでした。
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>/";
ましたが、動作しますが、理由はわかりませんが、ポートの正規表現を解決する方法を考えています....