Ruby 条件正则表达式变通方法

标签 ruby regex

我正在开发一个用 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/

相关文章:

Chrome 扩展中的 javascript 正则表达式

javascript - 使用js验证邮件

Ruby:Sinatra:Web 服务在 Thin 上不可访问

ruby - 以与访问对象属性相同的方式访问散列属性

java - 负后视中的可变空白?

JavaScript 按多个分隔符分割并保留引用的文本

ruby - Sinatra 使用 Thin 代替 Puma

ruby-on-rails - Ruby on Rails : Acts as taggable on gem, 在模型中使用上下文

ruby-on-rails - url_for : query string key without equal sign

javascript - 走出一个表情