1

我试过下面的代码,但它给了我不匹配。

re:run("qw@qc.com", "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b").

正则表达式我在这里http://www.regular-expressions.info/email.html

编辑:下一个不起作用

re:run("345345", "\b[0-9]+\b").

如果您只收到字符串中的电子邮件,那么该电子邮件将匹配

re:run("qw@qc.com", "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$").
4

2 回答 2

5

我不愿回答这个问题,因为我认为它依赖于一个不正确的假设——您可以使用正则表达式确定电子邮件地址是否有效。有关详细信息,请参阅此问题;乍一看,我注意到您问题中的正则表达式不接受.museum.рф顶级域。

也就是说,您需要转义反斜杠。您希望字符串包含反斜杠,但在 Erlang 中,反斜杠用于字符串内部以转义各种字符,因此任何文字反斜杠都需要写为\\. 尝试这个:

3> re:run("qw@qc.com", "\\b[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}\\b").
{match,[{0,9}]}

或者更好的是,这个:

8> re:run("qw@qc.com", "\\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\b").
{match,[{0,9}]}

那是HTML 5 标准中使用的正则表达式,修改为使用\\b而不是^and $

于 2012-07-30T11:33:04.380 回答
0

看起来你需要一个不区分大小写的匹配?

目前[A-Z0-9._%+-](例如)仅匹配大写字符(加数字等)。

一种解决方案是指定[A-Za-z]. 另一种解决方案是在匹配之前将您的电子邮件地址转换为大写。

于 2012-07-30T09:46:05.503 回答