电子邮件的正则表达式,不以替换脚本结尾

时间:2010-06-01 06:37:34

标签: ruby-on-rails ruby regex email-validation

我正在修改我的正则表达式:

Extracting email addresses in an html block in ruby/rails

基本上,我通过解析包含mailto引用者(使用hpricot)的所有链接的文本块来制作另一个使用ROT13的混淆器。如果用户只输入了一个电子邮件地址(没有通过tinymce将其转换为链接),那么一个用户没有注意到的用例

所以这是我的方法的基本流程: 1.使用href =“mailto:...”解析所有标签的文本块 2.用javascript函数替换每个标记,将其更改为ROT13(使用此脚本:http://unixmonkey.net/?p=20) 3.一旦所有链接都被混淆,将生成的文本块传递给另一个解析所有电子邮件的函数(这个函数有一个电子邮件正则表达式,用于反转电子邮件地址,然后在该电子邮件中添加一个范围 - 将其反转)

第3步应该清除那些不在href标签中的剩余电子邮件的文本块(意味着它没有被hpricot解析)。问题是我的正则表达式仍然可以找到转换为ROT13的电子邮件。我想要捕获的只是电子邮件,而不是转换为ROT13。

我该怎么做?好的所有电子邮件WERE CONVERTED都有一个尾随的“'.replace”。意思是,我需要收到所有没有该字符串的电子邮件。到目前为止我有这个正则表达式:

/ \ B([A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] + [AZ] {2,4}(”替换)。)\ B / I

但这会得到所有带有尾随'.replace的电子邮件,我想要反过来,我现在对此感到难过。那里有正则表达式大师的帮助吗?

更多信息:

这是正则表达式+解析文本块:

http://www.rubular.com/r/NqXIHrNqjI

正如您所看到的,前两个“电子邮件地址”已经使用ROT13进行了混淆。我需要一个获取电子邮件的正则表达式ohhellzyeah@ribute.com和kaboom@yahoo.com

1 个答案:

答案 0 :(得分:4)

在负向前瞻

您可以使用否定前瞻声明模式匹配。

例如,以下正则表达式匹配所有不以".replace"字符串结尾的字符串:

^(?!.*\.replace$).*$

另一个示例,此正则表达式匹配除a*b*以外的所有aabb

^(?!aabb$)a*b*$

理想情况下,

另见


具体解决方案

以下正则表达式适用于此场景:(see on rubular.com):

/\b([A-Z0-9._%+-]+@(?![A-Z0-9.-]*'\.replace\b)[A-Z0-9.-]+\.[A-Z]{2,4})\b/i