De fábrica, pesquisar para trás em um documento não funciona no modo de expressão regular. O Nppp explica em uma caixa de diálogo que o recurso está desabilitado devido a um comportamento não intuitivo:
Por padrão, a busca por regex reverso é desabilitada devido a resultados potencialmente inesperados.
De que tipo de resultados inesperados estamos falando aqui e por que eles surgem ?
A página do manual sobre expressões regulares dá uma dica sobre a natureza do problema com uma string de teste e uma regex que produziriam números diferentes de correspondências em operações para frente e para trás.
Para os aventureiros, a página do manual à qual o diálogo se refere, com instruções para habilitar a pesquisa de regex reverso, está aqui .
A pesquisa de regex reverso foi relatada como quebrada e/ou desabilitada desde a versão 7.8.7 .
A melhor maneira de verificar informações sobre o motivo pelo qual um recurso foi removido/oculto é verificar o repositório do software, se disponível. Há uma solicitação de pull que fornece raciocínio parcial:
Eu poderia encontrar um exemplo bem rápido de que não funciona muito bem com o caret. Com este texto:
se você procurar
test.*?example
no modo regular e posicionar o cursor em qualquer lugar, ele sempre encontrará a correspondência correta mais próxima. Por exemplo, se você colocar aqui:ele encontrará vizinhos
testexample
como esperado. Mas se você alternar para o modo de direção para trás e colocar o cursor aqui:não faz muito sentido e, de forma inconsistente, encontra a primeira linha.
Por que funciona assim? Não tenho ideia, nem tempo para analisar, mas certamente está relacionado ao fato de que a maioria dos mecanismos de regex (incluindo Boost.Regex usado pelo N++) funcionam para frente , não para trás, e o Notepad++ usa algumas soluções alternativas para a funcionalidade de trás para frente para simular a localização de correspondências na direção oposta. Eles não conseguiram implementar soluções alternativas totalmente confiáveis para a posição do cursor, no entanto, e decidiram desabilitar a mudança de direção por padrão.
Provavelmente, resultados inesperados podem ser devidos ao fato de que o regex pode procurar o primeiro , o subsequente ou o último caractere ou sequência em uma linha ou string.
Isso significa que se você estiver começando no final , trabalhando de trás para frente, pode especificar a segunda ocorrência de um caractere ou pode significar a penúltima ocorrência. Depende da implementação do regex e pode não ser IOTTMCO .