ruby - 使用 Regexp 在 Ruby 中匹配模式

标签 ruby regex

假设我们有以下字符串数组(这个数组要大得多):

[
  'http://www.example.com?id=123456',
  'http://www.example.com?id=234567'
]

如您所见,两个字符串中直到第一个数字的所有内容都是相同的。有没有办法轻松找到两个字符串的共同点和不同点?这样我就得到了像 'http://www.example.com?id=' 这样的字符串和像 ['123456', '234567'] 这样的数组。

最佳答案

这是一种在数组中查找最长公共(public)前缀的方法。

def _lcp(str1, str2)
  end_index = [str1.length, str2.length].min - 1
  end_index.downto(0) do |i|
    return str1[0..i] if str1[0..i] == str2[0..i]
  end
  ''
end

def lcp(strings)
  strings.inject do |acc, str|
    _lcp(acc, str)
  end
end


lcp [
  'http://www.example.com?id=123456',
  'http://www.example.com?id=234567',
  'http://www.example.com?id=987654'
]
#=> "http://www.example.com?id="

lcp [
  'http://www.example.com?id=123456',
  'http://www.example.com?id=123457'
]
#=> "http://www.example.com?id=12345"

关于ruby - 使用 Regexp 在 Ruby 中匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25425880/

相关文章:

ruby-on-rails - 将收藏夹关联添加到 Rails 中的用户模型

regex - 仅从 Hive 中的字符串字段中提取数字

python - 从python中的字符串中提取年份

python - 为什么\b 在 python re 模块中不起作用?

正则表达式匹配英国邮政编码的前半部分

ruby-on-rails - NameError:Heroku 日志中未初始化的常量 CarrierWave::Storage::Fog

ruby-on-rails - rails partial 不处理本地人

ruby-on-rails - 在 Rails 3.1 中,为什么当调用另一个模型时我的自定义验证器会引发 'NameError: uninitialized constant' ?

ruby - 看不懂三角数枚举器yielder yield

Javascript - 在字符串中屏蔽帐号