カテゴリ: PHP 更新日: 2026/05/27

PHPで正規表現を使ったWebスクレイピング入門!preg_matchとpreg_replaceの使い方

PHP の 正規表現(preg_match, preg_replace)を使ったデータ抽出
PHP の 正規表現(preg_match, preg_replace)を使ったデータ抽出

先生と生徒の会話形式で理解しよう

生徒

「先生、PHPでWebサイトから特定の文字や数字を取り出したいんですけど、簡単にできますか?」

先生

「もちろんです。PHPにはpreg_matchpreg_replaceという正規表現を使う方法があります。これを使うと、文章の中から必要なデータだけを抽出したり、置き換えたりできます。」

生徒

「正規表現って難しそうですが、初心者でもできますか?」

先生

「大丈夫です。難しい用語もありますが、順番に例を見ながら理解していきましょう。プログラム未経験の方でも、文字列のパターンを探す仕組みとしてイメージすれば簡単です。」

1. 正規表現とは?

1. 正規表現とは?
1. 正規表現とは?

正規表現(せいきひょうげん、Regular Expression)とは、文章や文字列の中から特定のパターンを探し出すためのルールです。例えば、電話番号やメールアドレス、HTMLタグなど、決まった形式のデータを見つけたいときに使います。PHPではpreg_matchpreg_replaceと組み合わせることで、Webスクレイピングやデータ抽出に役立ちます。

2. preg_matchの基本的な使い方

2. preg_matchの基本的な使い方
2. preg_matchの基本的な使い方

preg_matchは文字列の中で、正規表現にマッチする部分を見つける関数です。マッチすると1、マッチしないと0を返します。例えばHTMLの中からタイトルだけ取り出すときに使えます。


$html = '<h1>PHPで正規表現入門</h1>';
preg_match('/<h1>(.*?)<\/h1>/', $html, $matches);
echo $matches[1];

PHPで正規表現入門

この例では、(.*?)という部分が「任意の文字列」を意味しており、

の間の文字だけを抽出しています。

3. preg_replaceで文字列を置き換える

3. preg_replaceで文字列を置き換える
3. preg_replaceで文字列を置き換える

preg_replaceは正規表現にマッチした文字列を、指定した別の文字列に置き換える関数です。Webスクレイピングでは、不要なタグを削除したり、フォーマットを整えるときに便利です。


$text = '価格は¥1,000です。';
$new_text = preg_replace('/[^\d]/', '', $text);
echo $new_text;

1000

ここでは[^\d]が数字以外の文字を意味しており、全て削除しています。これで数字だけを取り出せます。

4. 実際にWebページのデータを抽出する

4. 実際にWebページのデータを抽出する
4. 実際にWebページのデータを抽出する

Webスクレイピングでは、file_get_contentscurlでページのHTMLを取得し、正規表現で必要な情報を抜き出します。例えばニュースの見出しだけを取得する例です。


$html = file_get_contents('https://example.com/news.html');
preg_match_all('/<h2 class="title">(.*?)<\/h2>/', $html, $matches);
print_r($matches[1]);

Array
(
    [0] => 最新ニュース1
    [1] => 最新ニュース2
    [2] => 最新ニュース3
)

preg_match_allは複数のマッチをすべて取得する関数で、配列として結果が返ってきます。

5. 正規表現で便利な文字クラス

5. 正規表現で便利な文字クラス
5. 正規表現で便利な文字クラス

正規表現では文字クラスを使うと、特定の種類の文字だけを簡単に指定できます。

  • \d:数字(0-9)
  • \w:英数字とアンダースコア
  • \s:空白文字(スペースや改行)

例えば、文字列からメールアドレスを抽出する場合は以下のように書きます。


$text = 'お問い合わせはtest@example.comまで';
preg_match('/[\w._%+-]+@[\w.-]+\.[a-zA-Z]{2,}/', $text, $matches);
echo $matches[0];

test@example.com

6. HTMLタグを削除してテキストだけ取り出す方法

6. HTMLタグを削除してテキストだけ取り出す方法
6. HTMLタグを削除してテキストだけ取り出す方法

WebスクレイピングでHTMLタグを取り除きたいときにも正規表現は便利です。preg_replaceを使えば簡単にできます。


$html = '<p>PHPでスクレイピングを学ぼう</p>';
$text = preg_replace('/<[^>]+>/', '', $html);
echo $text;

PHPでスクレイピングを学ぼう

<[^>]+>は、<から>までの文字列、つまりHTMLタグ全体を意味します。

7. 便利な正規表現パターンのまとめ

7. 便利な正規表現パターンのまとめ
7. 便利な正規表現パターンのまとめ

よく使うパターンを覚えておくとスクレイピングが楽になります。

  • 数字だけを抽出:/\d+/
  • 英数字だけを抽出:/\w+/
  • 特定のHTMLタグ内の文字列:/<tag>(.*?)<\/tag>/
  • メールアドレス:/[\w._%+-]+@[\w.-]+\.[a-zA-Z]{2,}/

これらを組み合わせることで、PHPでのWebスクレイピングが効率的に行えます。

8. 正規表現の注意点

8. 正規表現の注意点
8. 正規表現の注意点

正規表現は非常に強力ですが、万能ではありません。特にHTMLの複雑な構造を扱うときは、正規表現だけで処理すると誤動作することがあります。その場合はPHPのDOMDocumentなどの専用のHTML解析ライブラリを使う方法も覚えておくと安心です。

ただし、簡単なスクレイピングや特定のパターン抽出には正規表現が最も手軽で便利です。数字の抽出、文字列の置換、HTMLタグの削除など、基本を押さえておきましょう。

まとめ

まとめ
まとめ

PHPの正規表現とWebスクレイピングの理解を深めよう

この記事では、PHPで正規表現を使ったWebスクレイピングの基本として、preg_matchpreg_match_allpreg_replaceの使い方を学びました。正規表現は、文字列の中から特定のパターンを見つけるための非常に強力な仕組みであり、WebサイトのHTMLから必要なデータだけを取り出したり、不要な文字列を削除したりする際に役立ちます。

Webスクレイピングでは、ニュースサイトの見出しや商品価格、メールアドレス、電話番号など、決まった形式の情報を抽出することがよくあります。そのような場面で、PHPの正規表現と文字列処理を組み合わせることで、効率よくデータ収集や情報整理を行うことができます。

特にpreg_matchは、文字列の中から最初に一致したデータを取得する際に便利です。一方で、複数の一致するデータをまとめて取得したい場合はpreg_match_allを使うとよいでしょう。また、不要なHTMLタグを削除したり、特定の文字列を別の文字列へ変換したい場合にはpreg_replaceが活躍します。

Webスクレイピングで正規表現が役立つ理由

Webページは基本的にHTMLで構成されています。HTMLの中には見出しタグや段落タグ、リンクタグなどが含まれており、その中に実際のテキストデータが存在しています。正規表現を使うことで、これらのタグ構造の中から必要な部分だけを抽出することができます。

例えば、ニュースサイトの見出しだけを取得したり、ブログ記事のタイトルを取得したりする場合には、HTMLタグのパターンを指定してデータを取得できます。また、価格情報や数値データを取得する場合には、数字だけを抽出する正規表現を使うことで簡単にデータ整理が可能になります。

正規表現を使った実践的なサンプル

ここでは、これまで学んだ内容をまとめた簡単なサンプルプログラムを紹介します。HTMLから見出しを抽出し、さらに不要なタグを削除してテキストだけを取得する例です。


$html = '
<div class="news">
    <h2 class="title">PHPスクレイピング入門</h2>
    <p>PHPでWebデータを取得する方法</p>
</div>
';

preg_match('/<h2 class="title">(.*?)<\/h2>/', $html, $matches);

$title = preg_replace('/<[^>]+>/', '', $matches[1]);

echo $title;

PHPスクレイピング入門

このプログラムでは、まずpreg_matchを使ってHTMLの中からh2タグの内容を取得しています。その後、preg_replaceを使ってHTMLタグを削除し、純粋なテキストデータだけを取り出しています。このような処理は、ブログ記事タイトル取得、ニュースデータ収集、商品情報抽出などさまざまな用途で利用できます。

正規表現を使うときのポイント

正規表現は非常に便利ですが、複雑なHTML構造をすべて正確に処理することは難しい場合があります。例えば入れ子になったタグや改行を含む構造などでは、想定外の結果になることもあります。そのため、単純なデータ抽出やパターン検索には正規表現を使い、より複雑なHTML解析が必要な場合はPHPのDOMDocumentなどのHTMLパーサーを併用する方法も覚えておくとよいでしょう。

また、正規表現を学ぶ際には、文字クラスや繰り返し記号の意味を理解することが重要です。例えば\dは数字、\wは英数字、\sは空白文字を表します。これらを組み合わせることで、メールアドレス抽出、数値抽出、HTMLタグ検索など、さまざまな文字列処理を簡単に実現できます。

PHPでのWebスクレイピングやデータ解析では、正規表現の知識があるだけで作業効率が大きく向上します。最初は難しく感じるかもしれませんが、実際にコードを書きながらパターンを試していくことで、少しずつ理解が深まっていきます。今回紹介した基本的な関数とパターンを覚えておくことで、実務でも役立つ文字列処理スキルを身につけることができます。

先生と生徒の振り返り会話

生徒

「先生、今回の記事を読んで、PHPで正規表現を使うとWebサイトから必要な情報だけを取り出せることが分かりました。特にpreg_matchでHTMLの中のデータを取得できるのが便利ですね。」

先生

「その通りです。正規表現は、文字列の中から決まったパターンを見つけるための仕組みなので、Webスクレイピングととても相性が良いのです。」

生徒

「preg_replaceを使うとHTMLタグを削除したり、不要な文字を取り除くこともできるんですよね。」

先生

「はい。例えば数字だけを抽出したり、メールアドレスを探したりする場合にも使えます。データ整理やテキスト処理ではとても重要な技術です。」

生徒

「Webスクレイピングでは、まずHTMLを取得して、それから正規表現で必要な部分を抜き出すという流れなんですね。」

先生

「その理解で大丈夫です。file_get_contentsやcurlでHTMLを取得し、preg_matchやpreg_match_allでデータ抽出を行う、そしてpreg_replaceで不要な文字を整理するという流れが基本になります。」

生徒

「最初は正規表現が難しそうでしたが、数字や文字のパターンを指定するだけだと考えると理解しやすいですね。」

先生

「とても良い理解です。正規表現は慣れると非常に強力なツールになります。PHPでのWebスクレイピングやデータ抽出を行う際には、ぜひ今回学んだpreg_matchやpreg_replaceを活用してみてください。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

PHP の Web スクレイピングの記事一覧へ
新着記事
New1
Python
Pythonの変数とは?定義方法とデータ型を初心者向けに解説
New2
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
New3
PHP
PHPのCSVファイルの読み書きと文字列処理を基礎から解説!初心者向けガイド
New4
PHP
PHPのメモリ管理と変数の破棄方法をやさしく解説!初心者でもわかるunsetの使い方
人気記事
No.1
Java&Spring記事人気No1
Python
PythonでAPIリクエストを送信する方法を完全解説!requestsライブラリで簡単API通信
No.2
Java&Spring記事人気No2
Python
Pythonで経過時間を計測する方法を完全解説!初心者でもわかる time.perf_counter() と time.sleep()
No.3
Java&Spring記事人気No3
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.4
Java&Spring記事人気No4
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.5
Java&Spring記事人気No5
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
Pythonのタプルの要素を変更できない理由とその回避策を初心者向けに解説
No.7
Java&Spring記事人気No7
ChatGPT
ChatGPTでPythonコードを作成する方法!プロンプトの書き方と質問例を解説
No.8
Java&Spring記事人気No8
Python
Pythonのrequestsライブラリ完全入門!HTTPリクエストの送り方を初心者向けにやさしく解説