6

我正在使用 ruby​​ 中的文本编辑器,我需要使用用户提供的正则表达式模式来支持“查找”功能。这是一个简单(熟悉)的用例:

Joe User 正在编辑一个文本文件,并将光标定位在文件中间的某个位置。他想从当前光标位置向后搜索与任意正则表达式匹配的最近子字符串。

我认为这个问题相当于将用户的模式应用于文件中光标位置之前的整个字符串。当然,我可以遍历文件开头的所有匹配项并使用最后一个匹配项,但这似乎效率低下……最好搜索“从右到左”,但我还没有找到办法这与红宝石正则表达式。你能帮我吗?

4

3 回答 3

11

在您的字符串上使用 rindex 方法。像这样:

>> 'ssBssBss'.rindex(/B/)
=> 5
于 2009-05-02T05:51:58.870 回答
4

由于 .* 的贪婪本性, looking for.*(foo)还应该找到最右边的 foo(但 rindex 可能更快——需要一个微基准来检查!)。

于 2009-05-02T05:54:12.483 回答
1

我认为 rindex 是要走的路。看起来 rindex 实际上会向后遍历字符串。查看string.c的第 957 行

看起来有人在 2001 年想出了一种在 PERL 中反转正则表达式的方法。所以你会反转一个字符串并反转一个正则表达式......然后使用从左到右的方法。

我相信现在这有点过头了,你可以选择 rindex

于 2009-05-02T06:02:57.953 回答