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

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

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

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

4

3 回答 3

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

火柴

gmail.com 的 dave.andersen

但不是:

出现在 SOSP

或者:

盯着现在

编辑:

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

比赛data.anderson at gmail.commy.fair.lady at gmail.com

于 2012-12-09T05:40:01.383 回答
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]+$
于 2012-12-09T05:41:35.717 回答
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\.]+" 之间的区别在于,第一种形式将匹配至少一个单词字符后跟至少一个句点后跟至少一个单词字符,而第二种form 将匹配单词字符和句点的任何混合。

于 2012-12-09T05:48:34.897 回答