【perl】【正規表現】


perlの正規表現の質問です.

他人の書いたプログラム中で,簡易的なメールアドレスチェックと抽出部分に以下のような正規表現を見かけたのですが
/([-\w.]+@[-\w.]+)/

[-\w.]の部分がどういう意味なのかがよくわかりません.
解る方に解説していただきたいです.
よろしくお願いします.

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/09/27 08:39:20
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:cooper0524 No.1

回答回数296ベストアンサー獲得回数4

ポイント60pt

http://www.rfs.jp/sb/perl/02/09.html

[]はこの中の任意の1文字にマッチです。

/wは英数字を表すので、

「-」(ハイフン)か、英数字か、「.」(ピリオド)のどれかということになります。

ですので、

[-\w.]+で1文字以上のハイフン、ピリオド、英数字で構成された文字列

ということになります。

id:upu

解答ありがとうございます.

[0-9]等のハイフンとごっちゃになって混乱していました.

2009/09/22 23:03:34
  • id:upu
    ということは,このチェックではアンダーバーが含まれるメールアドレスは
    正しくチェックできないことになりますね.
  • id:rouge_2008
    回答内の参照URLで、「\w」は
    『アルファベットまたは数字(単語)の1文字にマッチ
    [a-zA-Z_0-9] と同じです。』と説明されていますので大丈夫です。
    ただし、「+」は含まれていませんので、もし「+」を含むメールアドレスもチェックしたい場合は、[-\w.]内に追加すれば良いです。
  • id:Iwa
    . も正規表現("任意の1字"を表す)ですから"ピリオド"としてなら \. とエスケープするべきですね。
  • id:van-dine
    「[-…」と先頭に書くと「-」の意味ですが、
    うっかり中に書くと範囲の意味にとられてしまうので、
    その時には「\-」と書きましょう。

    ちなみに、(iwaさんの発言ですが)[…]内ではほとんどの記号が無効になります。
  • id:tezcello
    The \d\s\w\D\S\W abbreviations can be used both inside and outside of character classes.
    マニュアルにはこんな記述があるようです。
    という事は、文字クラスの中でも外でも使えるのは \d\s\w\D\S\W だけで、ピリオド . は文字クラス内では単なる . になるのでは? > lwa さん
  • id:Iwa
    > 文字クラスの中でも外でも使えるのは \d\s\w\D\S\W だけで、ピリオド . は文字クラス内では単なる .

    そのようです。
    失礼いたしました。
  • id:znz
    文字クラスの中でも外でも使えるものなら \b もありますが、中と外では意味が違います。

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

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

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

回答リクエストを送信したユーザーはいません