我尝试使用以下类型的正则表达式
([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))|(FakeEmail:)|(Email:)|(\1\2)|(\1\3)(假设\1是电子邮件正则表达式组,\2是FakeEmail:,\3是电子邮件:,因为我没有计算出真正的分组)
我要做的就是说“找到单词email:如果你找到了,就拿起这个单词后面的任何电子邮件地址。”
我收到的电子邮件正则表达式是关于堆栈溢出的其他问题。
我的测试字符串可能是这样的
"This guy is spamming me from
FakeEmail: fakeemailAdress@someplace.com
but here is is real info:
Email: testemail@someplace.com"有什么建议吗?谢谢
发布于 2012-01-19 12:02:21
我要么对你想要做的事情感到困惑,要么你的Regex就是大错特错。特别是:
为什么你把Email:放在结尾,而不是开头--来匹配你的例子?
为什么您的Email:和\1\2都用竖线字符分隔,就像它们在字段中一样?这就是将模式编译为OR。(找到电子邮件模式,或者单词" email :",或者任何\1\2最终的含义,因为它在这里脱离了上下文。)
如果你想要做的就是匹配像Email: testemail@someplace.com这样的东西,你不需要任何回溯。
这样的代码可能就是您需要的全部内容:
Email:\s+([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))此外,我强烈建议不要尝试如此严格地验证电子邮件地址。您可能想要阅读http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx。我将模式简化为更类似于以下内容的内容:
Email:\s+(\S+)*@(\S+\.\S+)发布于 2012-01-19 12:03:02
尝试:
(Fake)?Email: *([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))如果是真实的电子邮件,捕获的群组\1将为空,如果是假电子邮件,则包含" fake“,而\2将是电子邮件本身。
但是,如果它是FakeEmail,你真的想捕获它吗?如果您想要捕获所有Email,但忽略所有FakeEmail,则执行以下操作:
\bEmail: *([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))字边界阻止Email位与"FakeEmail“匹配。
更新:注意,您的正则表达式只匹配小写,因为它在[] everywhere中有a-z,而不是[A-Z]。确保使用ignore case开关将正则表达式提供给java匹配函数。即:
Pattern.compile("(Fake)?Email: .....", Pattern.CASE_INSENSITIVE)发布于 2012-01-19 13:00:54
您可以使用以下代码来匹配所有类型的电子邮件地址:
String text = "This guy is spamming me from\n" +
"FakeEmail: fakeemail+Adress@someplace.com\n" +
"fakeEmail: \n" +
"fakeemail@someplace.com" +
"but here is is real info:\n" +
"Email: test.email+info@someplace.com\n";
Matcher m = Pattern.compile("(?i)(?s)Email:\\s*([_a-z\\d\\+-]+(\\.[_a-z\\d\\+-]+)*@[a-z\\d-]+(\\.[a-z\\d-]+)*(\\.[a-z]{2,4}))").matcher(text);
while(m.find())
System.out.printf("Email is [%s]%n", m.group(1));这将与电子邮件文本匹配:
(?s)出现在不同的行上(?i)忽略大小写比较.句点+的电子邮件地址输出:上面的代码是
Email is [fakeemail+Adress@someplace.com]
Email is [fakeemail@someplace.comb]
Email is [test.email+info@someplace.com]https://stackoverflow.com/questions/8920828
复制相似问题