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 に答える