为什么这个正则表达式不匹配任何东西?

时间:2014-04-01 19:33:35

标签: java regex

我尝试使用以下正则表达式查找html字符串中的所有电子邮件:

RegExp
[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}

HTML
<a href="mailto:ddawson@gcitravel.net">ddawson@gcitravel.net</a></span>. </p> 

我使用matcher.find()应该找到子串吗?当我执行搜索时,它是空的,任何想法为什么?

3 个答案:

答案 0 :(得分:3)

默认情况下,正则表达式区分大小写,因此例如最后一部分.net无法与.[A-Z]{2,4}匹配。

要使正则表达式不区分大小写,请添加(?i)标记

"(?i)[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}"

或使用Pattern.CASE_INSENSITIVE标志进行编译。

Pattern.compile("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}",Pattern.CASE_INSENSITIVE);

答案 1 :(得分:2)

A-Z只匹配大写字母,还有一个额外的\。试试这个......

[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[a-zA-Z]{2,4}

答案 2 :(得分:0)

当我们拥有新域名时,这种搜索电子邮件的方式已不再正确。此正则表达式无法在域site.berlin中找到任何电子邮件。扩展2,4,删除或查找

[A-Za-z0-9-+/.]*@[A-Za-z0-9/.-]*\\.*[A-Za-z]$

我没有足够的声誉对帖子发表评论,最长的TLD域名是.international,因此{2,4}将无法找到它并记住域名中包含点名称的域名.co.uk ,. de.com。域名也必须以字母结尾,不能是数字或特殊字符。电子邮件地址可能包含{+ 3}},例如+或 -