problema understaning /.*/

0

Eu tenho a compreensão do problema /.*/ de acordo com as coisas escritas em livros, isso imprime toda a linha do texto. Sabemos que . significa qualquer caractere e * significa zero ou mais ocorrências do caractere precedente. então eu espero que /.*/ encontre algo como rrr qqqq abbbbb , quero dizer repetição contínua de um único caractere.

mas isso não é o que faz. por quê?

minha segunda pergunta é : por que /.+/ não faz a mesma coisa ?? no texto estou tentando o resultado é ?

    
por Fatemeh Karimi 05.08.2018 / 11:35

1 resposta

4

Não, o * em .* significa "qualquer número da expressão anterior ", ou seja, zero ou mais de qualquer tipo de caractere que corresponda à expressão . .

Isso significa que .* corresponderá a aaaa e abcd , pois todos os caracteres em abcd correspondem a . . Ele também corresponderá a uma linha vazia, pois permite combinações zero .

Se você quiser encontrar uma linha que contenha um caractere repetido , use

/\(.\)*/

Esta expressão corresponde a "qualquer caractere, então o mesmo caractere , e então qualquer número de mais do mesmo caracter". O * poderia ser removido, a menos que você esteja procurando por linhas que contenham apenas um caractere repetido. Nesse caso, você deve ancorar a expressão no início e no final da linha, como

/^\(.\)*$/

O editor ed suporta expressões regulares basic . O modificador + é um modificador de expressão regular estendido . O ? obtido de ed ao usar /.+/ seria seguido por no match (ou No match no GNU ed ) se você tivesse ativado explicações de erro com o comando H . Isso ocorre porque ele tenta encontrar uma linha com um + , precedido por algum outro caractere.

A expressão regular estendida .+ ("corresponde a um ou mais de qualquer caractere") é equivalente à expressão regular básica ..* , ou seja, "corresponde a um caractere e zero ou mais de qualquer caractere". p>

De acordo com seu manual , o GNU ed deve suportar \+ em expressões regulares, de modo que ..* seja equivalente a .\+ , mas o GNU ed 1.14.2 no meu sistema OpenBSD não faz isso.

    
por 05.08.2018 / 11:41