1

我目前正在为此修改我的正则表达式:

在 ruby​​/rails 的 html 块中提取电子邮件地址

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

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

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

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

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

但这会得到所有带有尾随'.replace的电子邮件我想得到相反的结果,我目前对此感到困惑。正则表达式大师有什么帮助吗?

更多信息:

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

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

如您所见,前两个“电子邮件地址”已经使用 ROT13 进行了模糊处理。我需要一个正则表达式来接收电子邮件 ohhellzyeah@ribute.com 和 kaboom@yahoo.com

4

1 回答 1

4

关于负前瞻

您可以使用否定前瞻来断言模式匹配。

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

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

作为另一个例子,这个正则表达式匹配 all a*b*,除了aabb

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

理想情况下,

也可以看看


具体解决方案

以下正则表达式适用于这种情况:(参见 rubular.com):

/\b([A-Z0-9._%+-]+@(?![A-Z0-9.-]*'\.replace\b)[A-Z0-9.-]+\.[A-Z]{2,4})\b/i
于 2010-06-01T06:43:08.973 回答