java电子邮件提取正则表达式?
Posted
技术标签:
【中文标题】java电子邮件提取正则表达式?【英文标题】:java email extraction regular expression? 【发布时间】:2011-01-16 02:06:30 【问题描述】:我想要一个从字符串中提取电子邮件地址的正则表达式(使用 Java 正则表达式)。
确实有效。
【问题讨论】:
电子邮件地址和正则表达式:***.com/questions/201323/… 是的。但实际上验证并不总是我们需要的。如果您放置 S 和 ^ 符号,它将不适用于任意文本。我希望我的问题和答案也对其他人有用。 该线程中发布的(许多!)模式/答案应该为您提供足够多的 IMO 信息。 【参考方案1】:这是真正有效的正则表达式。 我花了一个小时在网上冲浪并测试不同的方法, 尽管谷歌在这些页面上排名第一,但其中大多数都不起作用。
我想和你分享一个有效的正则表达式:
[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0- 9]+)*(\\.[A-Za-z]2,)这是原始链接: http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/
【讨论】:
对不起,这不对。加号地址 (en.wikipedia.org/wiki/E-mail_address#Sub-addressing) 将失败,除其他外(例如 foo+@gmail.com)。为电子邮件地址编写正确的正则表达式 /very/ 很难(如果不是不可能的话)。另见***.com/questions/201323/… 不要谈论 ICANN 允许在电子邮件地址中使用非拉丁字符的决定:***.com/questions/201323/… 嗯,你是对的,我不知道加号可以是任何电子邮件地址的一部分。我可以很容易地添加在方括号之间。但我很确定 99.9% 的人不使用它,而且大多数电子邮件服务器不允许将加号作为电子邮件地址的一部分。绝对同意,在某些情况下,无论哪种正则表达式都可能在电子邮件验证/提取上失败。虽然这个对我有用,但我见过其他人没有。 好吧 google 允许 + 号,因此所有拥有 gmail 的智能用户都可以这样做。 ;P【参考方案2】:将此正则表达式测试器插件安装到 Eclipse 中,您将拥有大量测试正则表达式的时间http://brosinski.com/regex/。
注意事项: 在插件中,字符转义只使用一个反斜杠。但是,当您将正则表达式转录为 Java/C# 字符串时,您必须将它们加倍,因为您将执行两次转义,首先是从 Java/C# 字符串机制中转义反斜杠,然后是实际的正则表达式字符转义机制。
用圆括号/省略号将您希望捕获其文本的正则表达式部分括起来。然后,您可以使用 Java 或 C# 正则表达式中的组函数来找出这些部分的值。
([_A-Za-z0-9-]+)(\.[_A-Za-z0-9-]+)@([A-Za-z0-9]+)(\. [A-Za-z0-9]+)
例如,使用上面的正则表达式,下面的字符串
abc.efg@asdf.cde
产量
start=0, end=16
Group(0) = abc.efg@asdf.cde
Group(1) = abc
Group(2) = .efg
Group(3) = asdf
Group(4) = .cde
第 0 组总是捕获匹配的整个字符串。
如果您不使用省略号括起任何部分,您将只能检测到匹配但无法捕获文本。
创建几个正则表达式可能比创建一个长的包罗万象的正则表达式更容易混淆,因为您可以以编程方式逐个测试,然后决定应该合并哪些正则表达式。尤其是当您发现以前从未考虑过的新电子邮件模式时。
【讨论】:
@h2g2java 说起我自己,我已经用过类似的插件了。我非常感谢您的回答,因为我还发现如果没有使用正则表达式的此类工具可能是一场噩梦。我相信您的回答会帮助很多人节省时间。【参考方案3】:我不得不添加一些破折号来允许它们。所以最终的结果是爪哇语:
final String MAIL_REGEX = "([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]2,)";
【讨论】:
【参考方案4】:有点晚了,但没关系。
这是我使用的。只需将其粘贴到 FireBug 的控制台并运行即可。在网页上查找“Textarea”(很可能在页面底部),它将包含一个单独的列表,其中包含在 A 标记中找到的所有电子邮件地址。
var jquery = document.createElement('script');
jquery.setAttribute('src', 'http://code.jquery.com/jquery-1.10.1.min.js');
document.body.appendChild(jquery);
var list = document.createElement('textarea');
list.setAttribute('emaillist');
document.body.appendChild(list);
var lijst = "";
$("#emaillist").val("");
$("a").each(function(idx,el)
var mail = $(el).filter('[href*="@"]').attr("href");
if(mail)
lijst += mail.replace("mailto:", "")+",";
);
$("#emaillist").val(lijst);
【讨论】:
【参考方案5】:Java 的内置电子邮件地址模式 (Patterns.EMAIL_ADDRESS
) 完美运行:
public static List<String> getEmails(@NonNull String input)
List<String> emails = new ArrayList<>();
Matcher matcher = Patterns.EMAIL_ADDRESS.matcher(input);
while (matcher.find())
int matchStart = matcher.start(0);
int matchEnd = matcher.end(0);
emails.add(input.substring(matchStart, matchEnd));
return emails;
【讨论】:
以上是关于java电子邮件提取正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章
寻找正则表达式以从 /etc/passwd 中提取电子邮件地址
JavaScript 从批量文本中提取电子邮件(使用正则表达式,JavaScript和jQuery)