テキストと日時の操作 (3/5)
作成:2010-12-06 09:59
更新:2010-12-06 09:59
更新:2010-12-06 09:59
■正規表現の利用例
では、正規表現の利用例をあげておきましょう。ここでは、URLを入力すると、そのページのテキストを取得し、そこからメールアドレスだけを探し出して表示させてみましょう。
下に挙げたリストがそのソースコードです。入力フィールドに「http://~」というようにして調べたいページのURLを入力し、送信してください。そのページに書かれているメールアドレスを 下のテキストエリアにすべて書き出します。
ここでは、まずfile関数を使ってURLのテキストを読み込み、それをimplodeで1つのテキストにまとめます。それから、パターンを用意し、それを使ってパターンマッチを行っています。
この変数は、けっこう複雑な構造になっています。マッチしたテキストを得るには、インデックス=0の値を取り出します。ここには更に連想配列が入っており、その値部分に探しだしたテキスト(つまり見つけたメールアドレス)が保管されています。
整理すれば、パターンマッチは「結果の配列のインデクス=0にある連想配列から値を取り出す」という作業で、見付け出したテキストがすべて得られる、というわけです。これさえ頭に入れておけば、パターンマッチはけっこう使えますよ。
下に挙げたリストがそのソースコードです。入力フィールドに「http://~」というようにして調べたいページのURLを入力し、送信してください。そのページに書かれているメールアドレスを 下のテキストエリアにすべて書き出します。
ここでは、まずfile関数を使ってURLのテキストを読み込み、それをimplodeで1つのテキストにまとめます。それから、パターンを用意し、それを使ってパターンマッチを行っています。
$pattern = "/([\w-]+)@([\w\.-]+)\b/";これが、用意したパターンです。――だいたい、ここで「げっ、正規表現難しい。無理無理」とあきらめてしまう人が多いんですが、正直、そんな必要はありません。正規表現パターンで検索すると、メールアドレスとか、URLとか、割とよく使われるパターンを公開してくれている人はたくさんいるんです。そうしたパターンをコピーして利用すれば、とりあえずパターンが作れなくても正規表現は利用できます。それから少しずつ自分で勉強していけばいいんですよ。
$flg = preg_match_all($pattern,$data,$matchs);これがパターンマッチを実行している部分ですね。これ自体は、別に難しい物はありません。この$matchsという変数に、パターンマッチした結果が入っているのです。
この変数は、けっこう複雑な構造になっています。マッチしたテキストを得るには、インデックス=0の値を取り出します。ここには更に連想配列が入っており、その値部分に探しだしたテキスト(つまり見つけたメールアドレス)が保管されています。
整理すれば、パターンマッチは「結果の配列のインデクス=0にある連想配列から値を取り出す」という作業で、見付け出したテキストがすべて得られる、というわけです。これさえ頭に入れておけば、パターンマッチはけっこう使えますよ。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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>
※関連コンテンツ