Pattern p = Pattern.compile("[\\w\\.]+\\sat\\s[\\w\\.]+");
将匹配网页中的以下三行:
dave.andersen at gmail.com
appear at SOSP
staring at now
但是,我只希望第一行匹配。有没有办法指定dot
两边至少有一个at
?
答案 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.com
和my.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 \。] +”之间的区别在于第一个表单将匹配至少一个单词字符,后跟至少一个句点,后跟至少一个单词字符而第二种形式将匹配单词字符和句点的任何混合。