[Cascavel-pm] coincidência de padrões e um lugar específico numa string

Gabriel Vieira gabriel.vieira em gmail.com
Terça Agosto 26 07:29:25 PDT 2008


$a=~/^(?:.*?\n){$linha}[^\n]*?$palavra/

$a contém (=~), no início de seu valor (^), qualquer caractere (.),
zero ou mais vezes (*), limitando o seu tamanho até o próximo match
(?), no caso uma quebra de linha (\n), tudo isso é um grupo que não é
capturado ((?:)) e cujo tamanho, ou vezes que esse grupo é aplicado, é
{$linha}. Isso tudo seguido de qualquer caractere se não nova linha
([^\n]), zero ou mais vezes (*), limitando o seu tamanho até o próximo
match (?), no caso $palavra.

Que tal ler o perlre?

2008/8/26  <fernandolouis em terra.com.br>:
> Esqueci de perguntar...
> e o "*?" ?
>
> ----- Original Message ----- From: "Wendel Scardua"
> <wendelscardua em gmail.com>
> To: "Cascavel Perl Mongers" <cascavel-pm em pm.org>
> Sent: Tuesday, August 26, 2008 10:49 AM
> Subject: Re: [Cascavel-pm]coincidência de padrões e um lugar específico numa
> string
>
>
> Resposta curta: RTFM, aka "perldoc perlre" :-)
>
> Resposta longa:
>
> (? normalmente não é algo válido, então essa expressão é usada para
> algumas especiais (condicionais, recursividade, look-forward, etc...)
>
> No caso, a expressão é (?: .... ) , que é um grupo-que-não-captura.
>
> Normalmente, você usa os parênteses pra "capturar" a ocorrência
> (armazenando-a em $1, $2, etc... ). Mas às vezes você quer agrupar uma
> parte da regexp só pra aplicar uma operação, como em:
> /foo(\d+lerolero)*bar/ . Aqui, você pode não estar interessado em
> colocar o match de "\d+lerolero" em $1, você só queria aplicar o "*"
> naquele trecho - sem falar que essa captura é mais ineficiente. Então
> você usa o (?: ... ) pra agrupar:
>
> /foo(?:\d+lerolero)*bar/
>
> Além disso, o (?: ) permite a você passar algumas opções de regexp
> apenas praquele trecho ( como o /i pra ser case-insensitive, ou /s pro
> "." casar com quebra de linha, etc...):
>
> /foo(?i:.+lerolero)*bar/
>
> Ou ainda tirar essas opções do trecho (ou ao mesmo tempo habilitar
> coisas e desabilitar coisas):
>
> /foo(?s-i:.+lerolero)*bar/i
>
> E, claro, perldoc perlre para mais informações. :-)
>
> []s
> Wendel
>
> 2008/8/26  <fernandolouis em terra.com.br>:
>>
>> *? e (?
>>
>> O "?" é um quantifdicador nessa expressão? Desconnheço outra função do "?"
>> se não esta.
>>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>



-- 
Gabriel Vieira


Mais detalhes sobre a lista de discussão Cascavel-pm