我正在学习正则表达式,我无法理解Java中的分组。 目前我的正则表达式是
([^:]?)(?![email])(\w+[\. ]?\w+)\ ?\@[\. ]?(\w+\.?\w+)\.edu
我的目标是提取各种格式的电子邮件地址。与此无关的字符串行的示例是:
To get on the vcode mailing list, please email engler@lcs.mit.edu.
我的表达式匹配正确的字符串,但
group(1) = e
group(2) = ngler
我想要的是
group(2) = engler
适用于其他字符串,例如href =" mailto:balaji@stanford.edu">
感谢您抽出宝贵时间帮助我。 顺便说一句,我使用http://www.regexplanet.com/advanced/java/index.html来帮助我,它将正则表达式转换为java理解的表达式,并向您显示分组。
谢谢你Affe
答案:( [^:]?)\ b(?!(电子邮件))\ b(\ w + [。]?\ w +)\?\ @ [。 ]?(\ w +。?\ w +)。edu,我不知道它是由角色对待的,谢谢。
答案 0 :(得分:1)
表达式[email]是一个字符类。它匹配字母e,m,a,i或l中的任何一个。它与“电子邮件”一词不匹配。那只是没有括号的电子邮件。这就是为什么它在engler中拿起e。
答案 1 :(得分:1)
请尝试使用此正则表达式:
([^:]?)(?<=email\s)(\w+[\. ]?\w+)\ ?\@[\. ]?(\w+\.?\w+)\.edu
我已将Negative Lookahead更改为正向Lookbehind,因为您想要声明字符email
(带有空格 - 我为此添加了\s
)应该在匹配之前。< / p>
我还从[]
删除了email
括号,因为它匹配了电子邮件中的任何字符并打破了您的群组(正如@Affe和@phatfingers所指出的那样)
答案 2 :(得分:0)
可以在此处找到使用正则表达式捕获电子邮件地址的非常好的描述:How to Find or Validate an Email Address
解析电子邮件地址是学习正则表达式的一个非常复杂的问题。你可能会从几个更简单的问题开始,这些问题的规则可以更容易明确。