2016-04-19 17 views
1

私は既存の電子メール正規表現を変更して、文字の間にハイフンを1つだけ挿入できるようにしようとしています。regexが最初のグループの一部を拒否する(注文)

^([\w]+(?:\.[\w]+)*(?:\-[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$ 

私は順番に問題を抱えている:私は最初のハイフンを使用して、ドットた場合、正規表現は、ドットの前の文字の左側にあるすべてのものを無視します:

[email protected] - >my-coo[email protected](空白は気にしないでください)。

最初の2つのグループの最大長の制限は64ですが、64文字を超える文字を置くと正しく動作しません。 3番目のグループの最大長は7で、それ以上の場合は検証されません。

あなたは一例として取ることができ

a[email protected]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa

aa[email protected]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaは悪い結果では良い結果です。

最初の例の前に64 a秒を持っていると@及び第二の例は、65 a

https://regex101.com/r/yO1xH7/3

を持っていた後、私はまた@後に同じことをしたいのですが、それはもっと複雑です私は思ったよりも。

提案がありますか?ありがとう。

答えて

1

あなたはハイフンを置く場所を少し間違えました。

^([\w]+(?:[\.\-][\w]+)*(?:[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$ 

私はあなたが?:の機能を知らないので、あなたが理解していないと思います。これが正しいものです。 Regex非キャプチャグループです。そこにそのパターンを避けることを意味します。

+0

あなたが望む長さの限界を定義すれば、私はあなたを助けることができます –

+0

私はそれを単語で定義することを意味します。たぶん私に正規表現を渡す電子メールの長すぎる例とそれをする必要があります –

+0

あなたの正規表現を何度も見たことがあります。私は**人間**言語ではなく、コード言語で説明する必要があります。私に予想される結果を与え、現在の間違った結果は何か。あなたの質問の投稿を更新し、それが完了したら教えてください。 –

関連する問題