質問するログイン新規登録
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

14572閲覧

正規表現でメールアドレスの確認

ryohasegawa

総合スコア437

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/03/06 13:40

0

1

正規表現でメールアドレスの確認のしかたを検索するとこのページにたどり着きました。

txt

1/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/

上のコードが実際のコードなのですが、(?:.[a-zA-Z0-9-]+)の部分が理解できなく困っています。
このサイトも活用して解読をしているのですが理解できません。説明をしていただけませんか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

(?: ) の中身から見ていきます。

. はピリオドという文字を表します。単に . と書くとメタ文字なので,バクスラッシュをつけてエスケープし,その文字そのものを表させています。

[a-zA-Z0-9-] は英数字とハイフンからなる文字クラスですね。

その次の +[a-zA-Z0-9-] だけにかかっています。
[a-zA-Z0-9-]+ で,〈英数字・ハイフンの 1 文字以上の連なり〉です。

以上をまとめると,.[a-zA-Z0-9-]+ は〈ピリオドのあとに 1 文字以上の英数字・ハイフンが続いたもの〉となります。

これを (?: ) で包んでいるわけですが,(?: ) の説明の前に,まず ( ) を振り返ってみます。

( ) は二つの働きがありましたね。
キャプチャー(捕獲)とグルーピング(グループ化)です。
(?: ) は,ここからキャプチャーの働きを除いたものです。つまり,グルーピングのためのものです。

以上が回答ですが,te2ji さんのおっしゃるように,E-mail の正規表現は闇が深いので,自分でどうにかしようとするのはやめたほうがよさそうです。

投稿2018/03/06 14:03

scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2018/03/06 14:09

詳しく説明ありがどうございます。 理解することができました。 コピペで使うのが正しいのですね
guest

0

(?:.[a-zA-Z0-9-]+)の部分

「ピリオドの後に、英数字かハイフンが1つ以上続いたもの」です。それを「その0回以上の繰り返し」のためにグルーピングしています。

投稿2018/03/06 13:52

otn

総合スコア86365

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2018/03/06 14:08

回答ありがとうございます。
guest

0

正規表現でメールアドレスの確認

辿り着いた先読むと分かるけど、正規表現だけでチェックすることは、頭おかしくなるんで、やめたほうがイイですよ。

正規表現の確認には、
ここ
とか
ここ
使うと便利です。

投稿2018/03/06 13:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2018/03/06 14:08

ありがとうございます。 確認させていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問