Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

@gilsones

[Resolvido] [ExpReg]

Recommended Posts

Seguinte, recebo uma variável assim "c100x50-w200-h200"

e preciso tranforma-la numa QueryString, para que fique assim "c=100x50&w=200&h=200"

 

Reparem que cada variavel tem um valor numero, menos o "c" que tem o valor "100x50".

 

Fiz uma Expressão Regular para isso, mas ele não altera o primeiro valor, no caso o "c"

fiz assim:

 

$variavel = str_replace('-', '&', $variavel);

 

$query = preg_replace('/([^0-9])([A-z]+)/', '$1$2=', $variavel);

 

Vou explicar oque essa expressão faz:

- Em $variavel substitui "-" por "&"

- Em $query, pega as letras, que antes delas não seja numero (no caso "&" antes, AQUI ESTÁ O PROBLEMA)

- $1 pega o "&" caso exista, o $2 é a letra, então ele forma a variavel (ex: "&w=")

 

Só que esse código me retorna: "c100x50&w=200&h=200"

o "c" não é substituido, pois no código ele pega as letras que antes delas não venham um número. SIM, é o caso dela, porém não tem um número mas também não tem nada!

 

Então eu preciso que pegue as letras que antes não sejam um número OU seja o início. Sei que início é representado por "^" mas não sei como ADAPTAR isso no meu código, de modo que não pare de funcionar o resto.

 

Creio que seja só alterar essa parte ([^0-9])

Teoricamente: (^ OU [^0-9])

 

Alguém consegue ajudar???

 

Agradeço muito!

 

 

PS: esqueci do titulo completo, fui editar e não dá, desculpem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim deu:

<?php
$variavel = "c100x50-w200-h200";

$variavel = str_replace('-', '&=', substr($variavel, 1));

echo "c=".$variavel;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim deu:

<?php
$variavel = "c100x50-w200-h200";

$variavel = str_replace('-', '&=', substr($variavel, 1));

echo "c=".$variavel;
?>

 

Mas essa variavel é dinamica, pode ser o "h", o "w" em primeiro, ou até outros que não citei no exemplo como "fh", "fv"...

Então teria que ser com expressão regular mesmo =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você separar cada valor em uma variável, você não conseguiria fazer de outra forma mais simples, sem ER?

 

<?php

sscanf( 'c=100x50&w=200&h=200', 'c=%dx%d&w=%d&h=%d', $x, $y, $w, $h );

var_dump( $x, $y, $w, $h );

Com sscanf() você varre uma string procurando por um padrão muito mais legível que uma ER, e cria tantas variáveis quantas você precisar para que recebam os valores analisados.

 

Esse exemplo, cada variável retorna, respectivamente, 100, 50, 200 e 200. Daí você concatena (se esse foro caso) da forma que achar necessário.

 

Desculpa se eu o que disse não se aplica, mas eu não entendi EXATAMENTE o que você quer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você separar cada valor em uma variável, você não conseguiria fazer de outra forma mais simples, sem ER?

 

<?php

sscanf( 'c=100x50&w=200&h=200', 'c=%dx%d&w=%d&h=%d', $x, $y, $w, $h );

var_dump( $x, $y, $w, $h );

Com sscanf() você varre uma string procurando por um padrão muito mais legível que uma ER, e cria tantas variáveis quantas você precisar para que recebam os valores analisados.

 

Esse exemplo, cada variável retorna, respectivamente, 100, 50, 200 e 200. Daí você concatena (se esse foro caso) da forma que achar necessário.

 

Desculpa se eu o que disse não se aplica, mas eu não entendi EXATAMENTE o que você quer...

 

Mas como eu disse acima, minha variavel é dinamica, pode ser:

'c=100x50&w=200&h=200'

'h=200&c=100x50&w=200'

'w=200&h=200&c=100x50'

e ainda existem outros valores como 'fh' e 'fv'.

 

Então essa alternativa não daria certo pois a sequencia sas variáveis pode variar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, tá. Agora eu entendi.

 

Então parse_str() resolve 95% do seu problema. Os outros 5% é achismo da minha parte, se você não precisar fazer o que eu fiz com os dados resultantes, só a referida função é suficiente:

 

$str = 'w=200&h=200&c=100x50';

// Parse

parse_str( $str, $output );

// Optional: Split AxB Patterns

array_walk(

   $output,

   function( &$item ) {

       if( preg_match( '/\d+x\d+/', $item ) != 0 ) {

           $item = explode( 'x', $item );
       }
   }
);

var_dump( $output );

Testei com essas três strings e todas passaram na boa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que ainda ta errado, ele recebe o valor assim c100x50-w200-h200 e quer que fique assim c=100x50&w=200&h=200

 

 

flw ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, recebo uma variável assim "c100x50-w200-h200"

e preciso tranforma-la numa QueryString, para que fique assim "c=100x50&w=200&h=200"

 

 

<?php

$string = 'c100x50-w200-h200';

preg_replace( '/([a-z])([0-9x]+)/e', '\$query_data[ "$1" ] = "$2"', $string );

echo '<pre>';
var_dump( http_build_query( $query_data ) );

 

Saída

c=100x50&w=200&h=200

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

$string = 'c100x50-w200-h200';

preg_replace( '/([a-z])([0-9x]+)/e', '\$query_data[ "$1" ] = "$2"', $string );

echo '<pre>';
var_dump( http_build_query( $query_data ) );

 

Saída

c=100x50&w=200&h=200

 

Isso mesmo!! muito obrigado a todos que ajudaram!

 

aproveitando o tópico, oque significa esse /e no final?

Sei que existem outros também, alguém poderia me passar um link que explique a função de alguns?

 

mais uma vez agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.