我正在开发一个用 Ruby 抓取电子邮件的程序,因此简单地使用正则表达式来尝试利用 .match(/some regex/) 只能是解决方案的一部分。对于这个问题,任何语言都没有完美的正则表达式。
要么表达式接受太多字符串,导致误报匹配,要么有效结果被排除。我正在使用正则表达式进行电子邮件“验证”(实际上电子邮件“怀疑”是一个更恰当的术语),它转换了一个“广泛的网络”。
此策略允许我通过将可疑地址存储在数组中并迭代处理边缘情况来最大化积极结果。这个问题围绕一个特定的边缘案例展开。
以字符串为例:
desktop_variety_top@728x90
像这个例子那样处理字符串的逻辑是清除在 @ 和字符串结尾之间不包含句点的任何字符串。
所以我们可能正在寻找类似的东西:
def purge_edge_case(array)
array.reject! { |s| s.<first_condition>? && s.<second_condition>? }
end
弄清楚这两个基于字符串的条件是我目前遇到的困难。
最佳答案
这里不需要正则表达式:
test = input.split('@')
test.size == 2 && \
&& !test.last.starts_with?('.') \
&& !test.last.ends_with?('.') \
&& test.last.includes?('.')
或者,不那么严格,完全按照您的要求:
test.size == 2 && test.last[/\./] # at least one dot after `@`
关于Ruby 条件正则表达式变通方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43823034/