significado claro de. * em regex

-1

. significa corresponder a qualquer caractere em expressões regulares. * significa zero ou mais ocorrências da expressão regular SINGLE que a precede. Meu alphabet.txt contém uma linha

abcdefghijklmnopqrstuvwxyz

Não grep a.*z alphabet.txt significa corresponder a qualquer substrings que começam com a , com zero ou mais ocorrências de qualquer tipo de caractere SINGLE entre elas e terminam com z ? Por exemplo, abz , abbz , ahhhhhz , mas não abbdz ?

Eu achei que grep a.*z alphabet.txt não pegaria a linha no meu arquivo alfabético.

    
por Mint.K 27.01.2017 / 03:18

4 respostas

2

* significa que o padrão imediatamente anterior é repetido, não que o texto correspondente seja repetido. Por exemplo, [ab]* significa (|[ab]|[ab][ab]|[ab][ab][ab]|…) O padrão [ab] é repetido zero ou mais vezes. Ele corresponderá a "aba" porque isso preenche corretamente o padrão [ab][ab][ab] .

Com .* , torna-se (|.|..|...|....|…) , portanto, corresponde a qualquer número de caracteres e os caracteres podem diferir.

    
por Chai T. Rex 27.01.2017 / 03:34
0

Em abbdz , só porque . corresponde a b no início não significa que . corresponderá apenas a b para o restante da expressão.

    
por muru 27.01.2017 / 03:27
0

Modificadores de repetição, como * , atuam no átomo regex anterior, não em repetições do caractere correspondido por o átomo regex anterior. Então, por exemplo:

$ printf 'az\nabz\nabbz\nabbbz\nabcz\n' | sed -n '/a.*z/p'
az
abz
abbz
abbbz
abcz

(todas as linhas correspondem). Se você quiser corresponder apenas as repetições do caractere correspondido , use uma referência anterior:

$ printf 'az\nabz\nabbz\nabbbz\nabcz\n' | sed -n '/a\(.\)*z/p'
abz
abbz
abbbz
    
por steeldriver 27.01.2017 / 03:36
0

grep a.*z corresponde a tudo entre a primeira ocorrência de a e a última ocorrência de z, incluindo o primeiro a e o último z. O .* é uma expressão curinga que corresponde a qualquer seqüência de caracteres, incluindo uma seqüência vazia de tamanho = 0. grep a.*z corresponde a todas as seguintes strings que começam com a e terminam com z: "abcdefghijklmnopqrstuvwxyz", "abz", "abbz", "ahhhhhz" e "abbdz". Ele também corresponde ao texto que abrange várias linhas, por exemplo, este texto:

abcdefghijklmnopqrstuvwxyz
abz
abbz
ahhhhhz
abbdz
    
por karel 27.01.2017 / 03:39