Repetição de padrão e regexp

1

Tome o padrão

[UGLER]*

A string UUG pode ser compatível? Quero dizer, a repetição é permitida?

    
por Maria Ines Parnisari 18.09.2013 / 05:00

2 respostas

5

Em princípio, sim, mas pode depender do sabor da regex que você está usando. No mínimo, BRE , < href="http://www.boost.org/doc/libs/1_54_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html"> ERE e PCRE corresponderá a essa string. A expressão [UGLER]* significa corresponde a 0 ou mais caracteres consecutivos do conjunto de U, G, L, E ou R .

Você pode testar isso para diferentes tipos de expressões regulares com bastante facilidade:

  • BRE

    $ echo UUG | grep '[UGLER]*'
    UUG
    
  • ERE

    $ echo UUG | grep -E '[UGLER]*'
    UUG
    
  • PCRE

    $ echo UUG | grep -P '[UGLER]*'
    UUG
    

É claro que, como você está procurando zero ou mais, ele também corresponderá a coisas que talvez você não esteja esperando:

$echo "foobar" | grep  '[UGLER]*'
foobar

Se o sabor de regex que você está usando suportar, use o + em vez de * . Por exemplo, com o PCRE:

 $echo -e "UUG\nfoobar" | grep -P '[UGLER]*'
 UUG
 foobar
 $echo -e "UUG\nfoobar" | grep -P '[UGLER]+'
 UUG
    
por 18.09.2013 / 05:08
1

Supondo que seu padrão seja um padrão de véu de tela e não um regexp, então sim, ele corresponderá a um nome de arquivo chamado 'UUG'. O padrão corresponderá a qualquer arquivo que comece com U, G, L, E ou R.

você pode testar isso com:

touch UUG
ls -l [UGLER]*

Se o padrão for um regexp, ele corresponderá à sequência ANY , porque você está correspondendo a zero ou mais instâncias de [UGLER]. Se você quiser combinar 1 ou mais em vez de zero ou mais, use + em vez de *

    
por 18.09.2013 / 05:08