Java 如何在正则表达式中指定字符类中的某个字符至少出现一次?

Java 如何在正则表达式中指定字符类中的某个字符至少出现一次?,java,regex,email,Java,Regex,Email,将匹配网页中的以下三行: Pattern p = Pattern.compile("[\\w\\.]+\\sat\\s[\\w\\.]+"); 但是,我只希望匹配第一行。是否有办法指定在at两侧至少有一个点 dave.andersen at gmail.com appear at SOSP staring at now 火柴 dave.andersen在gmail.com 但不是: 出现在SOSP上 或: 盯着现在 编辑: \w+\.\w+\s+at\s+\w+\.\w+ 匹配gmail.

将匹配网页中的以下三行:

Pattern p = Pattern.compile("[\\w\\.]+\\sat\\s[\\w\\.]+");
但是,我只希望匹配第一行。是否有办法指定在
at
两侧至少有一个

dave.andersen at gmail.com
appear at SOSP
staring at now
火柴

dave.andersen在gmail.com

但不是:

出现在SOSP上

或:

盯着现在

编辑:

\w+\.\w+\s+at\s+\w+\.\w+

匹配gmail.com上的
data.anderson
和gmail.com上的
my.fair.lady

也许你可以试试这个

\w+\.[\w\.]+\s+at\s+\w+\.[\w\.]+
这将确保单词之间出现“.”

这是重新定义的版本,与“at”前后的一个点完全匹配

你可以用

\w+\.\w+\sat\s\w+\.\w+

使用“+”表示至少一个字符是正确的,但是使用“[\w\.]+”匹配任何字符串或句点

这将与“foo.bar at foo.bar”或“foo.bar at foo.bar”匹配:

这将匹配“foo.bar at foo.bar”或“foo.bar at foo.foo.bar”:


“\w+\.+\w+”和“[\w\.]+”之间的差异第一种形式将匹配至少一个单词字符,后跟至少一个句点,后跟至少一个单词字符,而第二种形式将匹配任何单词字符和句点的混合。

我的意思是至少出现一次,而不是只出现一次:),但它可能有多个点:)
^[a-zA-Z0-9]+\.[a-zA-Z0-9]+\sat\s[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
Pattern p = Pattern.compile("\\w+\\.+\\w+\\sat\\s\\w+\\.+\\w+");
Pattern p = Pattern.compile("\\w+\\.[\\w\\.]+\\sat\\s\\w+\\.[\\w\\.]+"