Encontrando linhas com elementos html como variável php

0

Eu estou tentando criar o regex para usar com o grep para procurar por linhas com o php variabe que tem o elemento html como valor, mas estou tendo problemas com ele.

Eu consegui fazer isso:

.*(\$)*(\=)*(\<).*\n?

Ele deve corresponder às linhas que possuem $, = e < caracteres.

Por exemplo:

$var = "<h1>test</h1>";

Comando grep que estou usando:

grep -Pro ".*(\$)*(\=)*(\<).*\n?"

E, por algum motivo, parece combinar linhas como esta também:

echo "</td> \n";
    
por user3482304 08.08.2017 / 13:48

1 resposta

0

O * s após (\$) e (\=) significa, como sempre, zero ou mais.

O .*\n? significa zero ou mais de qualquer caractere (opcionalmente) (devido ao ? , que significa zero ou um) seguido por \n .

Isso significa que .*(\$)*(\=)*(\<).*\n? corresponderá a qualquer linha com (\<) , independentemente de ela ser precedida por um escape $ e / ou = ou não.

Em inglês, o regexp é lido como "zero ou mais caracteres, seguido opcionalmente por $ , então talvez um = , depois um < (não opcional) e, em seguida, zero ou mais caracteres , opcionalmente seguido por uma nova linha. "

Em outras palavras, o regexp inteiro, ignorando as capturas, é equivalente a apenas < . É a única coisa no regexp que não é opcional.

BTW, use + em vez de * se você quer dizer um ou mais.

Você pode querer tentar algo mais como:

grep -P '\$var\s*=\s*['"].*<[^>]+>'

Corresponde a $var seguido por zero ou mais caracteres de espaços em branco, em seguida, um = , em seguida, zero ou mais espaços em branco novamente, seguidos por ' ou " , depois zero-or- mais de qualquer caractere seguido por um < , em seguida, qualquer caractere exceto a > , seguido por um > .

por exemplo. $var='....<h1>' corresponderia.

Note que isso não vai pegar $var='htmlcode' , onde há uma nova linha entre o 'var =' e qualquer html.

    
por 08.08.2017 / 16:02