Pergunta

Eu bastante novo em expressões regulares e preciso de ajuda. Preciso filtrar algumas linhas usando Regex em Perl. Vou passar o regex para outra função, para que ela precise ser feita em uma única linha.

Eu quero selecionar apenas linhas que contêm "too long"E isso não começa com "SKIPPING"

Aqui estão minhas seqüências de teste:

Pulando esse vínculo desde a maturidade por muito tempo
Tkando esse vínculo desde a maturidade por muito tempo
Batendo esse vínculo desde a maturidade por muito tempo
Olá, essa maturidade muito tempo
Este é muito longo
olá

A regra Regex deve corresponder o seguinte em 'Long':

Pulando esse vínculo desde a maturidade por muito tempo
Batendo esse vínculo desde a maturidade por muito tempo
Olá, essa maturidade muito tempo
Este é muito longo

E deve pular:

"Olá" porque não contém 'muito tempo'
"Ignorando esse vínculo desde a maturidade por muito tempo" porque contém 'pulando'

Foi útil?

Solução

/^(?!SKIPPING).*too long/

Outras dicas

Pessoalmente, eu faria isso como dois regex separados apenas para deixar mais claro.

while (<FILE>)
{
  next if /^SKIPPING/;
  next if !/too long/;

   ... do stuff
}

Eu suspeito que você talvez depois de um único regex, mas prefiro se dividir em algo mais legível assim:

use strict;
use warnings;

for my $line ( <DATA> ) {
    next  if $line =~ m/^SKIPPING/;
    next  if $line !~ m/too long/;

    # do something with $line
    chomp $line;
    say "Found: ", $line, ':length=', length( $line );
}

__DATA__
SKIPPING this bond since maturity too long
TKIPPING this bond since maturity too long
SLAPPING this bond since maturity too long
Hello this maturity too long
this is too long
hello there

Use um lookahead; Vejo Esta explicação da aparência regex.

^(?!SKIPPING).*too long
/^(?<!SKIPPING).*too long$/

Combina as linhas que você está procurando. O sinal de dólar no final faz com que ele corresponda apenas a cordas que terminam com "muito tempo".

Espero que isto ajude!

Usando o visual negativo:

(?<!^SKIPPING)too long$
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top