PHPで正規表現を使ったWebスクレイピング入門!preg_matchとpreg_replaceの使い方
生徒
「先生、PHPでWebサイトから特定の文字や数字を取り出したいんですけど、簡単にできますか?」
先生
「もちろんです。PHPにはpreg_matchやpreg_replaceという正規表現を使う方法があります。これを使うと、文章の中から必要なデータだけを抽出したり、置き換えたりできます。」
生徒
「正規表現って難しそうですが、初心者でもできますか?」
先生
「大丈夫です。難しい用語もありますが、順番に例を見ながら理解していきましょう。プログラム未経験の方でも、文字列のパターンを探す仕組みとしてイメージすれば簡単です。」
1. 正規表現とは?
正規表現(せいきひょうげん、Regular Expression)とは、文章や文字列の中から特定のパターンを探し出すためのルールです。例えば、電話番号やメールアドレス、HTMLタグなど、決まった形式のデータを見つけたいときに使います。PHPではpreg_matchやpreg_replaceと組み合わせることで、Webスクレイピングやデータ抽出に役立ちます。
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で文字列を置き換える
preg_replaceは正規表現にマッチした文字列を、指定した別の文字列に置き換える関数です。Webスクレイピングでは、不要なタグを削除したり、フォーマットを整えるときに便利です。
$text = '価格は¥1,000です。';
$new_text = preg_replace('/[^\d]/', '', $text);
echo $new_text;
1000
ここでは[^\d]が数字以外の文字を意味しており、全て削除しています。これで数字だけを取り出せます。
4. 実際にWebページのデータを抽出する
Webスクレイピングでは、file_get_contentsやcurlでページの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. 正規表現で便利な文字クラス
正規表現では文字クラスを使うと、特定の種類の文字だけを簡単に指定できます。
\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タグを削除してテキストだけ取り出す方法
WebスクレイピングでHTMLタグを取り除きたいときにも正規表現は便利です。preg_replaceを使えば簡単にできます。
$html = '<p>PHPでスクレイピングを学ぼう</p>';
$text = preg_replace('/<[^>]+>/', '', $html);
echo $text;
PHPでスクレイピングを学ぼう
<[^>]+>は、<から>までの文字列、つまりHTMLタグ全体を意味します。
7. 便利な正規表現パターンのまとめ
よく使うパターンを覚えておくとスクレイピングが楽になります。
- 数字だけを抽出:
/\d+/ - 英数字だけを抽出:
/\w+/ - 特定のHTMLタグ内の文字列:
/<tag>(.*?)<\/tag>/ - メールアドレス:
/[\w._%+-]+@[\w.-]+\.[a-zA-Z]{2,}/
これらを組み合わせることで、PHPでのWebスクレイピングが効率的に行えます。
8. 正規表現の注意点
正規表現は非常に強力ですが、万能ではありません。特にHTMLの複雑な構造を扱うときは、正規表現だけで処理すると誤動作することがあります。その場合はPHPのDOMDocumentなどの専用のHTML解析ライブラリを使う方法も覚えておくと安心です。
ただし、簡単なスクレイピングや特定のパターン抽出には正規表現が最も手軽で便利です。数字の抽出、文字列の置換、HTMLタグの削除など、基本を押さえておきましょう。
まとめ
PHPの正規表現とWebスクレイピングの理解を深めよう
この記事では、PHPで正規表現を使ったWebスクレイピングの基本として、preg_match、preg_match_all、preg_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を活用してみてください。」