【问题标题】:How to match regexp starting from specific character index in Ruby 1.8?如何从 Ruby 1.8 中的特定字符索引开始匹配正则表达式?
【发布时间】:2012-09-07 15:14:57
【问题描述】:

在 Ruby 1.9 中,我会使用 String#match(regexp,start_index)。我确信在 Ruby 1.8 中必须有一个(计算效率高的)等价物,但我找不到它。你知道它是什么吗?

【问题讨论】:

    标签: ruby regex ruby-1.8


    【解决方案1】:

    你可以用^.{start_index}开始正则表达式

    或者在执行匹配之前先取子字符串。

    或者,如果您受限于使用 Ruby 1.8,但可以安装自己的库,那么您可以使用 Oniguruma

    【讨论】:

    • 当然...但请注意,我要求提供“计算效率高”的替代方案。
    • @AlexD:是什么让您认为^.{n} 计算效率不高?正则表达式引擎可能只是偏移到字符串中并从那里开始工作。快速进行基准测试表明,^.{n} 比明显的替代方案 (s[i..-1].match(re)) 稍快。
    • 我在irb试了下才回答,效率低下。 O(n) 的字符串长度,我将使用它来解析可能是数十或数百兆字节的大文件。根据我所做的测试,在这种情况下,一场比赛可能需要多达 30 秒。
    • @mikej,安装 Oniguruma 是一个有趣的想法(我不知道这是可能的),但不幸的是,这是一个(有点流行的)gem,告诉所有 Ruby 1.8 是不可接受的用户说“你必须安装 Oniguruma 才能使用这个 gem”。
    【解决方案2】:

    据我所知,在纯 Ruby 1.8 中,没有有效的方法将正则表达式与大字符串匹配,从任意索引开始。

    这似乎是一个重大缺陷。我猜这个故事的寓意是:使用 Ruby 1.9!

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多