Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Opa, estou com uma dúvida bastante parecida.
Estou aprendendo ER agora, li um guia e estou praticando.
Situação:
Um campo de um formulário recebe uma URL completa e eu quero pegar somente parte dela, que é a ID do tópico.
Mas as URLs podem variar:
//Somente a ID do tópico aparece
$url_1 = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345";
//Aparece a ID e a página e post com definição "last"
$url_2 = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=last#last";
//A ID e a página, seguida de "last"
$url_3 = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=2#last";
//ID, página e post
$url_4 = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=3#1234567";
Eu quero pegar somente o valor de topicid, que pode variar entre 1 e 5 números.
Eu fui testando umas coisas mas só consegui depois de 3 ERs. http://forum.imasters.com.br/public/style_emoticons/default/natal_ohmy.gif Imagino que tem como fazer com apenas uma.
Eu fiz isso:
<?php
//Retorna a ID até o fim #n
preg_match_all('/id=(.*)&?/i', $url, $vars);
//Retorna a ID seguida do '&' (nas URLs que tem)
preg_match_all('/^[0-9]+&?/i', $vars[1][0], $id);
//Só então retorna apenas a ID
echo preg_replace('/&/', "", $id[0][0]);
?>
Agradeço desde já. http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif
>
testado com os quatro tipos de URL:
$url[0] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345";
$url[1] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=last#last";
$url[2] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=2#last";
$url[3] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=3#1234567";
for ( $i = 0; $i < 4; $i++ )
{
echo preg_replace( "/.+topicid=([0-9]{1,5}).*/i", "$1", $url[$i] ) . "<br />";
}
Perfeito! http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gifAgora só pra eu entender...
**echo preg_replace( "/.+topicid=([0-9]{1,5}).*/i", "$1", $url[$i] ) . "<br />";**
O que são esses trechos destacados?
Agradecido.
o "i" é só um modificador para tornar case-insensitive. Nesse caso, pode tirar, pois URL é sempre minúsculo
o "$1" é a referência ao grupo da ER (grupo é o que está entre parênteses.). Se houvesse mais grupos, poderia ser referenciado com $2, $3 etc, ou \\1, \\2, \\3 etc
>
o "i" é só um modificador para tornar case-insensitive. Nesse caso, pode tirar, pois URL é sempre minúsculo
o "$1" é a referência ao grupo da ER (grupo é o que está entre parênteses.). Se houvesse mais grupos, poderia ser referenciado com $2, $3 etc, ou \\1, \\2, \\3 etc
Cara, valeu mesmo! http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif
Lucas Guima,
Seus posts foram separados em um novo tópico.
Tópico Original http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/index.php?/topic/375613-percorrer-string/
testado com os quatro tipos de URL:
$url[0] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345";
$url[1] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=last#last";
$url[2] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=2#last";
$url[3] = "http://www.algumforumdavida.com/forum.php?action=viewtopic&topicid=12345&page=3#1234567";
for ( $i = 0; $i < 4; $i++ )
{