Encontrar o último (mais à direita) páreo para uma expressão regular arbitrária em ruby

StackOverflow https://stackoverflow.com/questions/814213

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando em um editor de texto em Ruby, e eu preciso para apoiar um recurso "Find" com padrões de expressões regulares fornecidos pelo usuário. Aqui está uma simples (familiar) caso de uso:

Joe usuário está editando um arquivo de texto, e posicionou a algum lugar cursor no meio do arquivo. Ele quer procurar para trás a partir da localização atual do cursor para a substring mais próximo combinando uma expressão regular arbitrária.

Estou pensando que este problema equivale a aplicação padrão do usuário para toda a cadeia que precede o cursor do local no arquivo. Claro, eu poderia percorrer todos os jogos desde o início do arquivo e usar o último jogo, mas isso parece dolorosamente ineficiente ... Seria melhor para procurar "direita para a esquerda", mas eu não encontrei uma maneira de fazer esta com rubi Regexp. Pode você ajudar?

Foi útil?

Solução

Use o método rindex em sua string. Como esta:

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

Outras dicas

procurando .*(foo) também deve localizar o foo mais à direita, graças à natureza cobiçosos de *.. (Mas rindex pode ser mais rápido - precisa de um microbenchmark para verificar)

Eu acho rindex é o caminho a percorrer. Parece que rindex vai realmente percorrer os para trás cordas. Confira linha 957 de string.c

Parece que alguém descobriu uma maneira de reverter regulares expressões em PERL em 2001. então você iria inverter uma string e reverter uma regex ... então use a esquerda para método certo.

Estou certo de que é um exagero agora e você pode ir com rindex

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top