libro
www.tuyano.com
初心者のためのPHPプログラミング入門

テキストと日時の操作 (3/5)

作成:2010-12-06 09:59
更新:2010-12-06 09:59

■正規表現の利用例

では、正規表現の利用例をあげておきましょう。ここでは、URLを入力すると、そのページのテキストを取得し、そこからメールアドレスだけを探し出して表示させてみましょう。

下に挙げたリストがそのソースコードです。入力フィールドに「http://~」というようにして調べたいページのURLを入力し、送信してください。そのページに書かれているメールアドレスを 下のテキストエリアにすべて書き出します。

ここでは、まずfile関数を使ってURLのテキストを読み込み、それをimplodeで1つのテキストにまとめます。それから、パターンを用意し、それを使ってパターンマッチを行っています。
$pattern = "/([\w-]+)@([\w\.-]+)\b/";
これが、用意したパターンです。――だいたい、ここで「げっ、正規表現難しい。無理無理」とあきらめてしまう人が多いんですが、正直、そんな必要はありません。正規表現パターンで検索すると、メールアドレスとか、URLとか、割とよく使われるパターンを公開してくれている人はたくさんいるんです。そうしたパターンをコピーして利用すれば、とりあえずパターンが作れなくても正規表現は利用できます。それから少しずつ自分で勉強していけばいいんですよ。
$flg = preg_match_all($pattern,$data,$matchs);
これがパターンマッチを実行している部分ですね。これ自体は、別に難しい物はありません。この$matchsという変数に、パターンマッチした結果が入っているのです。

この変数は、けっこう複雑な構造になっています。マッチしたテキストを得るには、インデックス=0の値を取り出します。ここには更に連想配列が入っており、その値部分に探しだしたテキスト(つまり見つけたメールアドレス)が保管されています。

整理すれば、パターンマッチは「結果の配列のインデクス=0にある連想配列から値を取り出す」という作業で、見付け出したテキストがすべて得られる、というわけです。これさえ頭に入れておけば、パターンマッチはけっこう使えますよ。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<?php
	if ($_POST != null){
		$url = $_POST['text1'];
		$lines = file($url);
		$data = implode($lines);
		// パターンマッチ
		$pattern = "/([\w-]+)@([\w\.-]+)\b/";
		$flg = preg_match_all($pattern,$data,$matchs);
		if ($flg != false){
			$result = "";
			foreach($matchs[0] as $key => $val){
				$result .= $val . "\n";
			}
		} else {
			$result = "ないよ。";
		}
	}
?>
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
		xml:lang="ja" lang="ja"> 
	<head> 
		<meta http-equiv="Content-Type"
			content="text/html; charset=UTF-8" /> 
		<title>sample page</title>
	</head>
	<body>
		<h1>Hello PHP!</h1>
		<form method="post" action="./index.php">
			<input type="text" name="text1" size="40"
				value="<?php echo htmlspecialchars($url); ?>"><br>
			<textarea name="area1" cols="30" rows="5"
				><?php echo $result; ?></textarea><br>
			<input type="submit">
		</form>
		<hr>
	</body>
</html>

※関連コンテンツ

「初心者のためのPHPプログラミング入門」に戻る