Oposto de \ K, para manter as coisas certas [duplicadas]

2

Na página de padrões estendidos perlre , podemos ler sobre \K :

Keep the stuff left of the \K, don't include it in $&

Aqui está o exemplo prático usando o GNU grep (que realmente mantém as coisas certas do \K ):

$ echo "foo bar buzz" | grep -Po "foo \Kbar buzz"
bar buzz

Existe alguma sequência oposta de \K ?

Por exemplo, para imprimir apenas bar , como:

$ echo "foo bar buzz" | grep -Po "foo \Kbar\X buzz"
bar
    
por kenorb 13.04.2018 / 01:07

1 resposta

6

Nesse caso, lookahead zero-width (?=...) faz o que você quer :

$ echo foo bar buzz | grep -Po "foo \Kbar(?= buzz)"
bar

Isso requer alguns parênteses extras. Não há escape de caractere único para lookahead do jeito que existe para \K .

\K é realmente apenas um lookbehind de largura zero para tudo até agora, então isso também é equivalente a

echo foo bar buzz | grep -Po "(?<=foo )bar(?= buzz)"

que eu acho mais fácil de seguir pessoalmente.

    
por 13.04.2018 / 01:15