2009-05-02 105 views
6

我正在研究ruby中的文本編輯器,並且需要使用用戶提供的正則表達式模式來支持「查找」功能。下面是一個簡單的(熟悉的)用例:在ruby中查找任意正則表達式的最後(最右邊)匹配

Joe用戶正在編輯一個文本文件,並將光標定位在文件中間的某處。他希望從當前光標位置向後搜索,以找到與任意正則表達式匹配的最近子字符串。

我在想,這個問題等於將用戶的模式應用到文件中游標位置前面的整個字符串。當然,我可以從文件開頭遍歷所有匹配並使用最後一場比賽,但這看起來很痛苦無效......最好是從右到左搜索,但我還沒找到辦法做這與紅寶石Regexp。你能幫我嗎?

回答

11

在您的字符串上使用rindex方法。就像這樣:

>> 'ssBssBss'.rindex(/B/) 
=> 5 
4

尋找.*(foo)也應該找到最右邊的FOO,感謝的貪婪的本性*(但RINDEX可能更快 - 需要一個微基準測試來檢查!)。

+0

這是對我們這些因爲我們用另一種語言沒有`rindex`誰一個有用的一般正則表達式的解決方案去。 (它也比我接受的答案看起來更清潔。) – 2012-03-07 17:46:43

1

我認爲rindex是要走的路。看起來rindex實際上會向後遍歷字符串。退房957行string.c

它看起來像有人在2001年在PERL中找到了reverse regular expressions的一種方法。所以,你可以反轉一個字符串並反轉一個正則表達式......然後使用從左到右的方法。

我肯定是矯枉過正,現在,你可以用RINDEX

相關問題