@gilsones 4 Denunciar post Postado Janeiro 28, 2012 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
Good 4 Denunciar post Postado Janeiro 28, 2012 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
@gilsones 4 Denunciar post Postado Janeiro 28, 2012 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
Bruno Augusto 417 Denunciar post Postado Janeiro 28, 2012 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
@gilsones 4 Denunciar post Postado Janeiro 29, 2012 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
Bruno Augusto 417 Denunciar post Postado Janeiro 29, 2012 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
Good 4 Denunciar post Postado Janeiro 29, 2012 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
Kakashi_Hatake 267 Denunciar post Postado Janeiro 29, 2012 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
@gilsones 4 Denunciar post Postado Janeiro 30, 2012 <?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
Kakashi_Hatake 267 Denunciar post Postado Janeiro 30, 2012 :seta: Modificadores do Padrão Compartilhar este post Link para o post Compartilhar em outros sites
@gilsones 4 Denunciar post Postado Janeiro 30, 2012 Obrigados Carlos!! Compartilhar este post Link para o post Compartilhar em outros sites