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));

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/06/19 19:29:17
  • 終了:2006/06/26 19:30:03

回答(2件)

id:yo-kun No.1

yo-kun回答回数220ベストアンサー獲得回数302006/06/19 19:44:53

ポイント35pt

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

^[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]+.*

でいかがでしょうか?

id:ryuzi_kambe

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

2006/06/19 19:59:18
id:wizemperor No.2

wizemperor回答回数379ベストアンサー獲得回数522006/06/19 19:47:25

ポイント35pt

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

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

id:ryuzi_kambe

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

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);

?>

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

2006/06/19 20:04:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません