在ruby中查找任意正则表达式的最后(最右边)匹配

jos*_*hng 6 ruby regex reverse

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

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

我认为这个问题相当于将用户的模式应用于文件中光标位置之前的整个字符串.当然,我可以从文件的开头循环遍历所有匹配并使用最后一个匹配,但这看起来非常低效......最好搜索"从右到左",但我还没有找到办法这与ruby Regexp.你能帮我吗?

ibz*_*ibz 11

在字符串上使用rindex方法.像这样:

>> 'ssBssBss'.rindex(/B/)
=> 5
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 5

寻找.*(foo)也应该找到最右边的 foo,这要归功于 .* 的贪婪本质(但 rindex 可能更快——需要一个微基准来检查!)。