在ruby中查找任意正则表达式的最后(最右边)匹配
题
我正在使用ruby中的文本编辑器,我需要支持“查找”。功能与用户提供的正则表达式模式。这是一个简单的(熟悉的)用例:
Joe User正在编辑文本文件,并将光标定位在文件中间的某个位置。他想从当前光标位置搜索向后,找到与任意正则表达式匹配的最近子字符串。
我认为这个问题相当于将用户的模式应用于文件中光标位置之前的整个字符串。当然,我可以从文件的开头循环遍历所有匹配并使用最后一个匹配,但这看起来非常低效......最好搜索“从右到左”,“但我还没有找到一种方法来使用ruby Regexp。你能帮忙吗?
解决方案
在字符串上使用rindex方法。像这样:
>> 'ssBssBss'.rindex(/B/)
=> 5
其他提示
寻找。*(foo)
也应该找到最右边的foo,这要归功于。*的贪婪性质(但是rindex可能更快 - 需要微基准测试才能检查!)。
我认为rindex是要走的路。似乎rindex实际上会向后遍历字符串。查看 string.c 的第957行
看起来有人想出办法反向定期PERL中的表达式早在2001年。所以你要反转字符串并反转正则表达式...然后使用从左到右的方法。
我确信现在有点矫枉过正,你可以使用rindex
不隶属于 StackOverflow