ホームページ  >  記事  >  バックエンド開発  >  phpSpider 上級ガイド: 正規表現を使用して Web コンテンツを抽出する方法?

phpSpider 上級ガイド: 正規表現を使用して Web コンテンツを抽出する方法?

WBOY
WBOYオリジナル
2023-07-24 20:28:461440ブラウズ

phpSpider 上級ガイド: 正規表現を使用して Web コンテンツを抽出する方法?

前書き:
Web クローラーを開発する場合、多くの場合、Web ページから特定のコンテンツを抽出する必要があります。正規表現は、Web ページでパターン マッチングを実行し、必要なコンテンツを迅速かつ正確に抽出するのに役立つ強力なツールです。この記事では、正規表現を使用して PHP で Web コンテンツを抽出する方法を詳しく理解し、コード例も示します。

1. 正規表現の基本構文
正規表現は文字パターンを記述する方法です。正規表現を使用して、文字列を柔軟に照合、検索、置換します。正規表現の基本的な構文の一部を次に示します。

  1. 文字の一致:
  2. .: 任意の文字と一致します
  3. []: 括弧内の任意の文字と一致します
  4. w: 任意の文字、数字、またはアンダースコアと一致します
  5. d: 任意の数字と一致します
  6. s: 任意の空白文字と一致します
  7. : Word の境界と一致します
  8. 繰り返し一致:
    • #: 前の文字の 0 回以上の繰り返しに一致
    • ##: 1 回以上の繰り返しに一致前の文字の
  9. ?: 前の文字の 0 回または 1 回の繰り返しに一致します
  10. {n} : 前の文字の n 回の繰り返しに一致します
  11. {n,} : 前の文字の少なくとも n 回の繰り返しと一致します
  12. {n,m} : 前の文字の少なくとも n 回の繰り返しと一致し、
  13. を最大 m 回繰り返します エスケープ文字:
  14. : 特殊文字をエスケープするなど、ドットの一致を示します

2. 正規一致には preg_match 関数を使用します
PHP には、正規表現を処理するための一連の関数が用意されています。最も一般的に使用されるのは preg_match 関数です。この関数は、通常の文字列マッチングを実行するために使用されます。 preg_match 関数の基本的な使い方は次のとおりです。

$pattern = '/正则表达式/';
$string = '要匹配的字符串';
$result = preg_match($pattern, $string, $matches);

このうち、$pattern は照合対象の正規表現、$string は照合対象の文字列、$result は照合結果のブール値です。 、$matches は一致を保存するための結果の配列です。

3. デモの例
例を使用して、正規表現を使用して Web ページのコンテンツを抽出する方法を説明します。

次のターゲット Web ページからすべてのリンクを抽出するとします:

<html>
<body>
<a href="https://www.example.com/link1">Link 1</a>
<a href="https://www.example.com/link2">Link 2</a>
<a href="https://www.example.com/link3">Link 3</a>
</body>
</html>

次の正規表現を使用して、すべてのリンクと一致します:

$pattern = '/<as+href=["'](.*?)["'].*>(.*?)</a>/';

preg_match_all 関数を使用して、すべての一致結果を 2 次元配列に保存できます:

$pattern = '/<as+href=["'](.*?)["'].*>(.*?)</a>/';
$string = '
            
              Link 1
              Link 2
              Link 3
            
          ';
preg_match_all($pattern, $string, $matches);

var_dump($matches[1]);  // 输出所有链接

このコードを実行すると、次の出力が得られます:

array(3) {
  [0]=>
  string(23) "https://www.example.com/link1"
  [1]=>
  string(23) "https://www.example.com/link2"
  [2]=>
  string(23) "https://www.example.com/link3"
}

このようにして、すべての一致に成功しました。リンクは Web ページから抽出されます。

4. 注意事項
クローラー開発に正規表現を使用する場合は、次の点に注意する必要があることに注意してください:

  1. 貪欲と非貪欲
    デフォルトでは、正規表現の繰り返し一致は貪欲です。つまり、可能な限り何度でも一致します。 ? を使用して、貪欲なマッチングを非貪欲なマッチングに変更できます。

たとえば、次の正規表現は、文字列「abcdef」全体に貪欲に一致します:

$pattern = '/a.*b/';
$string = 'abcdef';
preg_match($pattern, $string, $matches);
var_dump($matches[0]);  // 输出'abcdef'

貪欲一致を非貪欲一致に変更すると、最も短い部分文字列のみが返されます:

$pattern = '/a.*?b/';
$string = 'abcdef';
preg_match($pattern, $string, $matches);
var_dump($matches[0]);  // 输出'ab'
  1. HTML タグ内の改行
    Web コンテンツを抽出するとき、HTML タグに含まれる改行に遭遇することがよくあります。改行を含むコンテンツと一致させるには、正規表現パターンに s 修飾子を追加します。
$pattern = '/<p>(.*)</p>/s';
$string = '<p>This is a paragraph.</p>
           <p>This is another paragraph.</p>';
preg_match_all($pattern, $string, $matches);
var_dump($matches[1]);  // 输出两个段落的内容

概要:
この記事の導入部を通じて、正規表現の使用方法をすでに理解できました。 PHPでWebページの内容を抽出する式メソッド。正規表現は、必要な情報を効率的に抽出するための非常に強力なツールです。このコンテンツが Web クローラーの開発を改善するのに役立つことを願っています。

以上がphpSpider 上級ガイド: 正規表現を使用して Web コンテンツを抽出する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。