Palavras-chave: PHP, strings, substr, strpos
Um dos tipos de dados com mais recursos na linguagem PHP é sem dúvida as strings. A linguagem PHP possui inúmeras funções para manipulação de strings e uma das mais utilizadas é o substr.
O substr é responsável por retornar um pedaço da string. Para isto ele se utiliza de três parâmetros: a própria string, o índice inicial e a quantidade de caracteres a ser retornada.
Acontece que podemos utilizar também um índice negativo, desta forma o PHP analisa a string contando N caracteres a partir do final, e não a partir do início. Veja a seguir alguns exemplos:
<?php $texto = "eu não sou besta pra tirar onda de herói"; echo substr($texto, 0, 16); // eu não sou besta echo "<br>\\n"; echo substr($texto, 11); // besta pra tirar onda de herói echo "<br>\\n"; echo substr($texto, 11, 9); // besta pra echo "<br>\\n"; echo substr($texto, -5); // herói echo "<br>\\n"; ?>
Também podemos utilizar a substr() em combinação com a strpos(). A strpos detecta a posição que uma string ocorre dentro de uma expressão.
No exemplo seguinte, detectamos onde ocorre a palavra “http://” para retornar somente o domínio presente no texto:
<?php $texto = "retornarei somente o domínio de http://www.pablo.blog.br"; $posicao = strpos($texto, 'http://'); echo substr($texto, $posicao+11); // pablo.blog.br echo "\\n<br>"; ?>
No caso de strings (acentuadas) em UTF-8, é melhor usar o mb_substr.
Usando só o substr, a string resultante aprensenta erros de codificação. No mais, é a mesma sintaxe.
Quebrei a cabeça com isso e essa mb_substr funcionou perfeitamente. Valeu!
Valeu, obrigado pela diga…
Simples e objetivo.
Parabéns.
Apenas uma dúvida: Há como obter a posição final através do strpos? Seguindo o exemplo temos
$texto = “retornarei somente o domínio de http://www.pablo.blog.br“;
mas e caso eu quisesse resgatar a string de um formulário por exemplo onde eu jamais saberia a posição final exata para usar o substr.
Exemplificando:
$texto = “retornarei somente o domínio de http://www.pablo.blog.br mais conteúdo etc etc”;
Quero usar parâmetros que retornem a string partindo de http até .br mas não sei a localização exata do final.
Abraços,
Nesse caso, é melhor você usar a função que pega a URL.
$url = $_SERVER[‘REQUEST_URI’];
echo $url;
Muito bom, me ajudou muito essa dica;
Abraço.
muito boa a sua dica.. parabens
Muito bom post, resolvi meu problema.
Outra excelente dica é usar o explode onde vc pode separar os campos por um delimitador
linha=’3ALFA,3 – ALFA ANDROSTANEDIOL GLUCORONIDE,Androstenediol, 3 alfa diol,543,,28.05.006.1,2/9/2011 9:07,N’
$array=explode(“,”,$linha);
echo “Codigo $array[0] ,Nome $array[1], Sinonimo $array[2], Material $array[3] ,DadoObrigatorio $array[4],CodigoAMB$array[5],exaDtUltAlt$array[6],EhCurva$array[7] “;
Obrigado pela dica
Meu senário é o seguinte, tenho uma tabela de logradouros, com os seguintes dados:
rua , leopoldo
avenida , trindade
praça , barnabé
a pergunta é: Como no PHP eu pego somente o que esta depois da VIRGULA ?????
Não consigo achar resposta em lugar nenhum, me ajudem .
Abraços !!!!
Na boa, a resposta está no tópico acima do seu. leia-o com atenção, que você terá a resposta que pediu.
Função:
Espero ajuda, até a próxima!
Função:
<?php
function virgula($texto){
$texto = substr($texto, (strpos($texto, ',')) + 1);
echo $texto;
}
virgula("Rua , Leopoldo"); // Leopoldo
virgula("Avenida , Trindade"); // Trindade
virgula("Praça , Barnabé"); // Barnabé
Espero ajuda, até a próxima!
Hugo Mendes,
Sua função me ajudou e muito, obrigado pela contribuição.
Abraço!
Ajudou bastante.. Obrigado
Galera,
Tenho o seguinte cenário:
Tenho um arquivo .txt que está com vários emails, mas tudo bagunçado:
Ex: ; diecles ;
Estou precisando ler este arquivo e listar apenas os emails:
Ex: dfarcoverde@gmail.com;
diecles@supermercados-arcoiris.com.br;
Tenho os “” para poder pegar os e-mails, mas ainda não achei uma solução.
Grato pela ajuda de todos e ótimo post.
*Tenho os “colchetes” para…
** “Maior que” e “Menor que” e não colchetes, perdão.
Muito bom!
Estou fascinado com PHP.
Tenho este cenário um texto corrido:
Processo 1051964-21.2xx4.8.26.0100 – Alimentos – Lei Especial No 5.478/68 – Oferta – C.F.C.C. – J.V.P.C. e outros – Vistos. Fls. 259/263: a par do pedido extrapolar os limites desta lide alimentar, manifestem-se os réus, no prazo de 48 horas. Após, com ou sem manifestação, ao Ministério Público. Int. – ADV: KATIA (OAB 111/SP), RODRIGO GASP (OAB 111/SP)
Processo 24432-38.12338.26.0100 – Inventário – Inventário e Partilha – LÍaS MARLY DE e outros – *Folhas 64/69-Ciência da pesquisa do Bacenjud* – ADV: JOEL CUNHA (OAB 12313/SP)
Processo 111220-45.111.8.26.0100 – Procedimento Ordinário – Investigação de Paternidade – A.A.R. – Folhas 41/44- Ciência da pesquisa do Bacenjud* – ADV: DEFENSORIA PÚBLICA DO ESTADO DE SÃO PAULO (OAB 999999/DP)
Precisaria sparar cada um dos registros que começa com Processo Até o fim dele. Termina com “)” mas pode existir outras “)” no meio do texto (então penso que seria o espaco o delimitador ou o outro Processo). Assim preciso separar cada ocorrência e jogar em uma variável para depois inserir em um banco de dados…(tabela processos Processo, texto, advogados)
Como seleciono o texto neste cenário? Entre dois caracteres?
Grato pela ajuda..
José Antônio, poderia me enviar um arquivo contendo esse conteúdo para analisar e poder te dar uma força, pois, em casos como o seu, primeiramente precisamos analisar se existem padrões na montagem dos dados para depois partimos para uma programação efetiva. No aguardo, abs.
to com uma atividade de php pedindo pra efetuar um algorítmo php que receba uma string e um caracter de busca e descubra o numero de ocorrencias deste caracter dentro da string. Para isso utilize laço de repetição , e as funções de string “strlen” e “substr”
Bom post, valeu mesmo codare.net
Eu tenho o seguinte código:
$nome = ‘Joana de Angelis’;
// quero pegar apenas o ‘DE’
echo substr($nome,strpos($nome,’ ‘),strrpos($nome,’ ‘)-4);
dessa forma funciona, no entanto gostaria de saber qual a outra forma fazer
alguém sabe?
muito bom artigo, tirou uma dúvida que eu tinha
vlw
Charlles ,
Conseguiu encontrar a solução? Se não, me envia um email que te ajudo ok?
Email: cristiano.mcon@gmail.com
Abraço.