現代のオンライン世界では、Web ページ内のハイパーリンク (ハイパーリンク) は不可欠な部分になっています。 Web サイトであっても電子メールであっても、ハイパーリンクはユーザーが他のリソースにアクセスするための重要な方法です。 Web ページのハイパーリンクは通常、HTML の タグを通じて実装されます。しかし、HTML 内のすべてのハイパーリンクを検索して抽出したい場合はどうすればよいでしょうか?ここで PHP 正規表現が役に立ちます。 PHP は人気のある Web 開発言語であり、HTML を処理および操作するための強力なツールです。 PHP は、HTML コードを解析、処理、操作するためのいくつかの組み込み関数と基本ツールを提供します。重要なツールの 1 つは正規表現です。正規表現は、ハイパーリンクを含む HTML 内の必要な情報を効果的に検索してフィルタリングできる一般的な文字列一致パターンです。 以下では、PHP 正規表現を使用してすべてのハイパーリンクを照合する方法を段階的に説明します。 PHP の preg_match_all() 関数を使用する PHP では、preg_match_all() 関数を使用して、すべての正規表現パターンと一致し、一致結果を返します。基本的な構文は次のとおりです。 preg_match_all(pattern, subject, matches, flags, offset);ログイン後にコピー各パラメータの意味は次のとおりです。 $pattern: 一致する正規表現のパターン。 $subject: 照合する文字列。 $matches: 一致結果の保存に使用される配列。省略した場合は、一致する結果が返されます。 $flags: マッチングの動作と結果を制御するフラグ ビット。オプション。 $offset: 文字列内のどの位置から照合を開始するか。オプション。 HTML 内のすべてのハイパーリンクと一致するには、まずハイパーリンク ルールに準拠する正規表現パターンを記述する必要があります。たとえば、次のとおりです。 $pattern = '@]*?s+)?href="([^"]*)"@i';ログイン後にコピーこの正規表現パターンでは、A を使用します。非キャプチャ グループ (?:[^>]*?s )? は、a タグ内の他の属性と一致するように作成されます。ここで、(?:...) は非キャプチャ グループを表し、[^>]*? は次の または まで > を除くすべての文字と一致することを表します。 > が表示され、? はオプションのオプションを示します。 照合プロセス中に、ハイパーリンクのアドレスも見つける必要があるため、キャプチャ グループ ([^"]*) がパターンで使用されます。これは、すべての項目を照合することを意味します。 " 文字を含まないもの。最後に、#@ をパターン区切り文字として使用し、大文字と小文字の一致が無視されることを示すフラグ i を追加します。 次に、preg_match_all() 関数を使用して、HTML 内のすべてのハイパーリンクを照合します。例: $html = file_get_contents('http://www.example.com'); $pattern = '@]*?s+)?href="([^"]*)"@i'; preg_match_all($pattern, $html, $matches); print_r($matches[1]);ログイン後にコピーこの例では、ファイル ストリーム関数 file_get_contents( ) を使用して HTML を取得します。 Web ページのコンテンツを取得し、$html 変数に保存します。次に、前に作成した正規表現を使用してすべてのハイパーリンク アドレスを照合し、その結果を $matches 配列の最初の要素に保存します。最後に、print_r() 関数を使用して、一致するすべてのハイパーリンク アドレスを出力します。 DOM パーサーの使用正規表現の使用に加えて、PHP の組み込み DOM パーサーを使用して HTML ドキュメントを解析することもできます。 DOM (Document Object Model) は、ツリー構造に基づいた XML/HTML パーサーであり、HTML ドキュメントを DOM 要素ノードのツリー構造に解析して、HTML 内のコンテンツと要素の操作と検索を容易にします。 PHP で DOM パーサーを使用して HTML 内のすべてのハイパーリンクを検索するには、次の手順に従います。 まず、HTML ドキュメントをロードするための DOMDocument オブジェクトを作成する必要があります。例: $doc = new DOMDocument(); $doc->loadHTMLFile('http://www.example.com');ログイン後にコピーDOMDocument クラスのloadHTMLFile() メソッドは、HTML ドキュメントをロードして解析するためにここで使用されます。読み込みが完了したら、getElementsByTagName() メソッドを使用して、すべての タグ要素を取得できます。例: $links = $doc->getElementsByTagName('a'); foreach ($links as $link) { echo $link->getAttribute('href') . ''; }ログイン後にコピーここでは、foreach ループを使用してすべての タグ要素を走査し、getAttribute() メソッドを使用して各ハイパーリンクの href を取得します。要素 プロパティ値。最後に、echo を使用して各ハイパーリンク アドレスを出力します。 XPath パーサーの使用DOM パーサーに加えて、PHP は別の XPath (XML パス言語、XML パス言語) ベースのパーサー DOMXPath も提供します。 XPath は、XML/HTML ドキュメント内のノードを選択および検索するための言語です。 DOMXPath は、XPath 言語の選択機能を使用して、HTML ドキュメント内の要素と属性を簡単に選択およびフィルタリングします。 DOMXPath を使用してすべての HTML 内のハイパーリンクを照合するには、次の手順に従います。 最初に DOMDocument オブジェクトを作成し、次に DOMXPath の対応するメソッドを通じて XPath 式を解析し、最後に一致する結果を取得する必要があります。 たとえば、次のコード スニペットでは、XPath 式 //a[@href] を使用して、すべての タグと一致し、# を持つタグのみを取得します。 ##href 属性付き要素: $doc = new DOMDocument(); $doc->loadHTMLFile('http://www.example.com'); $xpath = new DOMXPath($doc); $links = $xpath->query('//a[@href]'); foreach ($links as $link) { echo $link->getAttribute('href') . ''; }ログイン後にコピー在这个代码片段中,我们先创建了一个 DOMDocument 对象并加载 HTML 页面,然后创建了一个 DOMXPath 对象。使用 query() 方法来解析 XPath 表达式,返回一个 DOMNodeList 对象,其中包含了所有匹配的元素节点。最后使用 foreach 循环遍历所有的 标签元素,并使用 getAttribute() 方法获取每个超链接元素的 href 属性值。最后,使用 echo 输出每个超链接地址。 总结 无论是使用正则表达式、DOM 解析器还是 XPath 解析器,都可以方便地在 HTML 中匹配和提取所有的超链接信息。不过,需要注意的是,在使用正则表达式时,由于 HTML 语言的复杂性和不规则性,需要针对具体情况编写相应的正则表达式模式,以确保匹配结果的准确性和可靠性。针对特定的场景和需求,可以选择合适的工具来进行 HTML 解析和处理,以便更好地满足项目的业务需求。