5

システムを使用して @twitter のような名前を取得していますが、次の正規表現はほぼ完璧です。

(?<![^\s<>])@([^\s<>]+)

私が見つけた問題は、名前の後に句読点がある場合です

たとえば、次のようになります。

  • Hey @mark ===> は @mark に一致します (これが私たちが望むものです)
  • @マークさん。===> は @mark に一致します。
  • Hey @mark, you're nice ===> @mark に一致
  • やあ@マーク!!!! ===> が @mark に一致するとは思いもしませんでした!!!!

明らかに、句読点ではなく、ユーザー名のみを一致させたいと考えています。警告は、一部のユーザー名にはユーザー名内にこれらのピリオドがあることです。たとえば、

たとえば、これらはすべて正当なユーザー名です

マークス

mark@gmail.com

mark_markus@gmail.com

EDIT 後読みを使用しています。上記のユーザー名の前に @ を付けて使用すると、それらは一致するはずですが、前に @ を付けないと、電子メール アドレスは実際には一致しません。@mark_markus@gmail.com は mark_markus@gmail.com と一致するはずですが、誰かが普通の古い mark_markus@gmail.com と入力した場合、gmail.com を一致させたくありません。

使用できるさまざまな句読点を考慮して正規表現を変更する方法についてのアイデアはありますか?

4

1 に答える 1

4

これはどう:

(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)

に置き換えまし[^\s<>]たが[\w@]、これはもう少し制限があります。 \w文字、数字、およびアンダースコアに一致します。特に許可する必要のある文字が他にある場合は、それらを各文字クラスに追加します。

このグループ:(?:\.\w+)*1つ以上のピリオドをユーザー名の一部にすることができますが、その直後に単語文字が続く場合に限ります。(?:...)これは非キャプチャグループであることに注意してください。論理的な目的で物事をグループ化したいが、結果をキャプチャする必要がない場合に便利です。

更新: 実際の例を参照してください

于 2013-03-15T15:31:21.857 に答える