O que é Greedy?


0

Este artigo irá explicar o que é Greedy e como usar Greedy.

Ambicioso

Com expressões regulares e curingas, guloso descreve um tipo de correspondência que continua procurando uma correspondência mesmo depois que uma correspondência é encontrada. Por exemplo, a expressão regular gulosa do Perl abaixo “. * E” corresponde a todo o texto até a última letra “e” na variável $example. Este exemplo retorna “Matched: Computer Hope,” não “Compute,” porque o texto tem vários caracteres “e”.

my $example = "Computer Hope";
$example =~ m/.*e/;
print "Matched: $&n";
Dica

Em Perl, $& é uma maneira rápida de encontrar tudo o que foi correspondido.

Um método para tornar a expressão regular não gananciosa (correspondência lenta) é adicionar um ponto de interrogação (?) Após o asterisco

my $example = "Computer Hope";
$example =~ m/.*?e/;
print "Matched: $&n";
print "After: $'n";

, como mostrado abaixo. Adicionar o ponto de interrogação instrui o computador a parar de procurar correspondências assim que uma correspondência for encontrada.

Matched: Compute
After: r Hope
A execução do script acima retorna o seguinte texto.

Dica

Em Perl, $’é uma maneira rápida de encontrar tudo após a correspondência.

O ponto de interrogação pode ser adicionado a outros tokens de expressão regular que também são gananciosos. Por exemplo, se estiver usando um sinal de mais (+) em vez de um asterisco, você pode alterá-lo para “+?” em sua expressão regular.

Por que você não deve fazer combinações gananciosas?

my $html = "Test <b>one</b> two <b>three</b>.";
$html =~ s/<.*>//g;
print "Output: $htmln";

Fazer uma correspondência gananciosa adiciona muito trabalho extra que geralmente não é necessário, o que torna a correspondência de texto muito mais lenta. Por exemplo, se você estiver analisando um arquivo HTML e quiser remover todas as tags HTML, a seguinte expressão regular gananciosa causa trabalho extra e falha.

Output: Test .

Por causa da correspondência gananciosa, a expressão regular corresponde à abertura da primeira tag e, em seguida, associa tudo ao final da última tag. Em nosso exemplo acima, o texto a seguir seria retornado porque tudo entre o primeiro menor que (<) e o último maior que (>) é correspondido.

my $html = "Test <b>one</b> two <b>three</b>.";
$html =~ s/<.*?>//g;
print "Output: $htmln";

Adicionar um ponto de interrogação após o asterisco torna a expressão regular preguiçosa e exibe uma saída melhor.

Output: Test one two three.

Com a correspondência lenta, o texto é correspondido com o primeiro maior que, mas como \/g (globalmente) é usado, ele se repete até que a string não tenha mais HTML. Com essa expressão regular, obtemos a seguinte saída.

my $html = "Test <b>one</b> two <b>three</b>.";
$html =~ s/<[^<>]+>//g;
print "Output: $htmln";

A correspondência lenta ajuda a corrigir problemas de correspondência de muito texto e aumenta a eficiência da correspondência. No entanto, poderia ser melhorado ainda mais se o “. *” For substituído por exatamente o texto que deve corresponder ou não. Por exemplo, usando nosso mesmo exemplo de HTML, poderíamos usar a seguinte expressão regular. [^<>]No exemplo acima,

+ em uma expressão regular Perl diz para corresponder a qualquer caractere que não seja menor ou maior que o símbolo. Essa expressão regular é mais rápida e também ajuda a não corresponder a HTML inválido ou texto contendo um símbolo de menor ou maior que não escapado usando o nome ou número da entidade.


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win
Rubem Rego

0 Comments

Your email address will not be published. Required fields are marked *

Choose A Format
Personality quiz
Series of questions that intends to reveal something about the personality
Trivia quiz
Series of questions with right and wrong answers that intends to check knowledge
Poll
Voting to make decisions or determine opinions
Story
Formatted Text with Embeds and Visuals
List
The Classic Internet Listicles
Countdown
The Classic Internet Countdowns
Open List
Submit your own item and vote up for the best submission
Ranked List
Upvote or downvote to decide the best list item
Meme
Upload your own images to make custom memes
Video
Youtube, Vimeo or Vine Embeds
Audio
Soundcloud or Mixcloud Embeds
Image
Photo or GIF
Gif
GIF format