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

时间:2012-12-09 05:33:37

标签: java regex email

Pattern p = Pattern.compile("[\\w\\.]+\\sat\\s[\\w\\.]+");

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

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

但是,我只希望第一行匹配。有没有办法指定dot两边至少有一个at

3 个答案:

答案 0 :(得分:1)

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

匹配

  

dave.andersen at gmail.com

但不是:

  

出现在SOSP

或:

  

现在盯着

修改

\w+\.[\w\.]+\s+at\s+\w+\.[\w\.]+

匹配data.anderson at gmail.commy.fair.lady at gmail.com

答案 1 :(得分:0)

可能你可以试试这个

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

这将确保“。”出现在单词之间。

这是重新定义的版本,在“at”

之前和之后恰好匹配一个点

你可以用

替换它
^[a-zA-Z0-9]+\.[a-zA-Z0-9]+\sat\s[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

答案 2 :(得分:0)

你有正确的想法使用“+”来表示至少一个,但使用“[\ w \。] +”匹配任何单词字符或句点字符串。

这将匹配诸如“foo.bar at foo.bar”或“foo .... bar at foo..bar”之类的内容:

Pattern p = Pattern.compile("\\w+\\.+\\w+\\sat\\s\\w+\\.+\\w+");

这将匹配诸如“foo.bar at foo.bar”或“foo.bar.bar at foo.foo.bar”之类的内容:

Pattern p = Pattern.compile("\\w+\\.[\\w\\.]+\\sat\\s\\w+\\.[\\w\\.]+"

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