在ruby中查找任意正则表达式的最后一个(最右边)匹配项
我正在用ruby开发一个文本编辑器,我需要用用户提供的正则表达式模式支持“查找”功能。下面是一个简单(熟悉的)用例: Joe User正在编辑一个文本文件,并将光标定位在文件的中间位置。他希望从当前光标位置向后搜索与任意正则表达式匹配的最近子字符串在ruby中查找任意正则表达式的最后一个(最右边)匹配项,ruby,regex,reverse,Ruby,Regex,Reverse,我正在用ruby开发一个文本编辑器,我需要用用户提供的正则表达式模式支持“查找”功能。下面是一个简单(熟悉的)用例: Joe User正在编辑一个文本文件,并将光标定位在文件的中间位置。他希望从当前光标位置向后搜索与任意正则表达式匹配的最近子字符串 我认为这个问题相当于将用户的模式应用于文件中光标位置之前的整个字符串。当然,我可以从文件开始循环所有匹配项并使用最后一个匹配项,但这似乎效率低下。。。最好是“从右向左”搜索,但我还没有找到用ruby Regexp实现这一点的方法。您能帮忙吗?在字符串
我认为这个问题相当于将用户的模式应用于文件中光标位置之前的整个字符串。当然,我可以从文件开始循环所有匹配项并使用最后一个匹配项,但这似乎效率低下。。。最好是“从右向左”搜索,但我还没有找到用ruby Regexp实现这一点的方法。您能帮忙吗?在字符串上使用rindex方法。像这样:
>> 'ssBssBss'.rindex(/B/)
=> 5
寻找
*(foo)
还应该找到最右边的foo,这要感谢。*的贪婪本性(但rindex可能更快,需要一个微基准来检查!)。我认为rindex是一条不错的选择。看起来rindex实际上会向后遍历字符串。请查看第957行
看起来有人早在2001年就想出了一种使用PERL的方法。所以你可以反转一个字符串和一个正则表达式…然后使用从左到右的方法
我相信现在这已经是过火了,您可以使用rindex这是一个有用的通用正则表达式解决方案,适用于我们这些没有
rindex
的人,因为我们使用的是另一种语言。(在我看来,这也比公认的答案更清晰。)