メールアドレス 正規表現 - PHPプロ!Q&A掲示板

799

  • 0P

メールアドレス 正規表現

質問日時 / 2007年12月2日 18:58    回答数 / 6件

Questioner:  docopon  このエントリーをはてなブックマークに追加 

キーワード / メールアドレス    正規表現   

下記コードについてお伺いします。

  1. preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $text)

なぜスラッシュ「/」が、正規表現部分のダブルクオーテーション「"     "」の前後に必要なのですか?

正規表現部分が「"/^」で始まり「$/"」で終わる代わりに、スラッシュを使用せずに「"^」で始まり「$"」で終わるようにしても$text = "mail@mail.com";のようなメールアドレスにはマッチする(trueを返す)ように思いますが...

「"/^」で始まり「$/"」で終わるようにする場合と、スラッシュを使用せずに「"^」で始まり「$"」で終わるようにする場合とは何が違うのでしょうか?

どなたかご存知の方がおられましたら、教えて下さい。

キャサリン


ツリー一覧

┗A01moochomoochoと申します。 そもそもで「/」を利用せずに
 ┗A01-1docoponmoochoさん ご回答ありがとうございました。 >
  ┗A01-1-1wintermute>ereg()の場合、正規表現部分が「"/^」で始まり「$/"
   ┗A01-1-1-1docopon >ereg()の場合、正規表現部分が「"/^」で始まり「$/
    ┗A01-1-1-1-1moochomoochoです。 >質問が良く伝わらなかったようです
     ┗A01-1-1-1-1-1docoponmoochoさん ご回答ありがとうございました。 >

回答一覧

並び替え:

A01 参考になった
answerermoocho [12月2日 21:23]

moochoと申します。

そもそもで「/」を利用せずに試してみましたか?
おそらくエラーになっていると思いますが。

もし「/」を利用せずに正常に動くのであれば
利用している関数はpreg_match()では無いと思います。

pregなどperl互換の正規表現では「/」はデリミタとして扱われています。
(厳密には「/」以外に数種の記号をデリミタとして利用できるので
「/」以外を利用している例もあるでしょうけど)

あと細かいですが、preg_match()がtrueを返すことはありません。
(0か、1。もしくはエラー時はfalseを返すかもしれませんが)

詳しくはマニュアルをご確認ください。
http://php.benscom.com/manual/ja/ref.pcre.php
http://php.benscom.com/manual/ja/function.preg-match.php

この意見に回答する

ツリーへ TOPへ

A01-1
replyerdocopon [12月3日 09:17]

moochoさん

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

>利用している関数はpreg_match()では無いと思います。
私が実際に使用したコードはpreg_match()ではなくereg()でした。ただ、今回の質問は正規表現部分に関する質問だったので私がお手本にしたpreg_match()のコードを利用したのです。PHPコード(preg_match)がスラッシュをつけるかつけないかに関係しているとは知りませんでした。

ところでpreg_match()の代わりにereg()を使用すると、

  1. ereg("^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$", $text)

で問題なく動いているのですが、ereg()の場合、正規表現部分が「"/^」で始まり「$/"」で終わる代わりに、スラッシュを使用せずに「"^」で始まり「$"」で終わるように”しなければならない”と言うことですか?

どなたかご存知の方、おられましたら教えて下さい。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyerwintermute [12月3日 09:29]

>ereg()の場合、正規表現部分が「"/^」で始まり「$/"」で終わる代わりに、スラッシュを使用せずに「"^」で始まり「$"」で終わるように”しなければならない”と言うことですか?
正規表現の基本を知っていれば、そういう質問はしないはずなので、まずは「正規表現」で検索して勉強してから質問するようにして下さい。

preg関係の関数で、最初と最後が/であるのは、マニュアルを見れば分かりますが、Perlでの慣習にすぎません。
~など、他の文字でもデリミタとして使えます。

# というか、最低でもマニュアルを読んでから質問するようにしてください。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerdocopon [12月3日 17:25]


>ereg()の場合、正規表現部分が「"/^」で始まり「$/"」で終わる代わりに、スラッシュを使用せずに「"^」で始まり「$"」で終わるように”しなければならない”と言うことですか?
質問が良く伝わらなかったようです。

もう一度質問します。

「^」と「$」を最初と最後につけるかどうかは、シチュエーションによると思いますが、ereg()の場合、正規表現部分が「"/」で始まり「/"」で終わる代わりに、ダブルクオートの前にスラッシュを使用せずに「"」で始まり「"」で終わるようにしなければならないと言うことですか?

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1 満足
replyermoocho [12月3日 19:44]

moochoです。

>質問が良く伝わらなかったようです。
とありますが、正規表現のリンクを付けておきましたが
確認はされましたか?

上記質問を読んでいるとデリミタという言葉を自体
理解されていないように思いますが。

同じくeregについて調べてみるとわかりますが
eregはデリミタを利用せず使用することが可能です。

「"」で始まり終わるように・・・とかかれていますが
これも試したらわかりますが、ereg(""^...$"", $text)のようにすると
確実にエラーになると思いますよ。

この辺りはPHPの記述の問題になるので
一度、参考書等を買ってこられて
じっくり読んでみることが必要かと思います。

試行錯誤した結果、どうしても解決できない、
理解できないことを質問されることは大変結構かと思いますが
試されもせず、一方的に質問したり、質問が良く伝わらなかったよう・・・
と言ってしまうとするのは逆に失礼ですよ?

とりあえず、最初に正規表現についてのマニュアルのリンクを
付けているわけですから、まず目を通してみてください。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1
replyerdocopon [12月4日 11:12]

moochoさん
ご回答ありがとうございました。


>これも試したらわかりますが、ereg(""^...$"", $text)のようにすると
>確実にエラーになると思いますよ。

ereg("^...$", $text)でちゃんと動きました。

ごれんらくまで。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)