Como faço para dizer ao RegEx (versão .NET) para obter a menor correspondência válida em vez da maior?
.net
regex
regex-greedy
non-greedy
Jonathan Allen
fonte
fonte
abcabk
ea.+?k
, RegEx corresponderá a toda a string.O operador não ganancioso
?
,. Igual a:fonte
O operador não ganancioso não significa a correspondência mais curta possível:
a.+?k
corresponderá a toda a string (neste exemplo) em vez de apenas os três últimos sinais.Eu gostaria de realmente encontrar a menor correspondência possível.
Essa é a última correspondência possível para '
a
' ainda permitir todas as correspondências parak
.Acho que a única maneira de fazer isso é usar uma expressão como:
Exibir trecho de código
fonte
cab
. Se minha entrada forcaaacab
e eu procurar pora.*?b
ela, ela retornará a string inteira em vez da correspondência curta interna. Como eu pesquisaria para trás a partir dob
?START[^START]*?END
(onde START e END são suas regexs de caractere inicial e final). Significa essencialmente "combinar qualquer coisa de INÍCIO a FIM, onde os caracteres intermediários não incluem INICIAR novamente"