人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP の ereg, preg を使用したマッチングについての質問です。

電話番号に一致する正規表現を探してみると
http://ns1.php.gr.jp/pipermail/php-users/2002-October/011162.html
にあるようなものでばっちり一致するのですが、次のような文中に混じっていると一致しません。

$ref_string = "連絡先は03-3333-3333までお願いします。"

echo ereg("^[0-9]+-[0-9]+-[0-9]+$", $ref_string, $reg));

このような場合は、どのように一致させてやればよいでしょうか。

●質問者: ryuzi_kambe
●カテゴリ:ウェブ制作
✍キーワード:echo PHP マッチング 正規表現 電話
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● yo-kun
●35ポイント

^は先頭を表し、$は末尾を示しますので

^[0-9]+-[0-9]+-[0-9]+$

文字列先頭から0?9までの数字列が始まり、0~9までの数字列で終了していないとマッチングしません。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm


ですから

.*[0-9]+-[0-9]+-[0-9]+.*

でいかがでしょうか?

◎質問者からの返答

ありがとうございます。しかし、質問にありますように、取り出し自体は成功しています。


2 ● wizemperor
●35ポイント

元のソースに合わせての回答です。

echo ereg("^[0-9]+-[0-9]+-[0-9]+$", $ref_string, $reg));


「^」は行頭を、「$」は行末に一致しますので、前後に他の文字があると一致しません。

次の様にしてはいかがでしょうか?

echo ereg("^(.*)\d{2,4}-\d{2,4}-\d{4}(.*)$", $ref_string, $reg));

\dが半角数字を表します。{n, m}は半角数字がn?m文字続くことを表します。

.* は任意の1文字の0回以上の繰り返しです。

ちなみに電話番号のみに対する正規表現についてはこんなのもありますよ。

http://blog.livedoor.jp/nipotan/archives/17526053.html

◎質問者からの返答

ありがとうございます。正規表現については同じ回答にたどり着いていました。

http://www.nextindex.net/perl/pattern.html

で、求めるものは preg_macth_all でしたので、上記と組み合わせて解決しました。

http://php.s3.to/man/function.preg-match-all.html

ref:例 1. テキストから全ての電話番号を得る

preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",

"Call 555-1212 or 1-800-555-1212", $phones);

?>

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ