PHP: Cortando strings (substr)

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>";
?>
This entry was posted in PHP. Bookmark the permalink.

27 Responses to PHP: Cortando strings (substr)

  1. orgutus says:

    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.

    • Jerônimo says:

      Quebrei a cabeça com isso e essa mb_substr funcionou perfeitamente. Valeu!

  2. Valeu, obrigado pela diga…

  3. Heigler says:

    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,

    • David says:

      Nesse caso, é melhor você usar a função que pega a URL.

      $url = $_SERVER[‘REQUEST_URI’];

      echo $url;

  4. Djeison says:

    Muito bom, me ajudou muito essa dica;

    Abraço.

  5. muito boa a sua dica.. parabens

  6. Marcio says:

    Muito bom post, resolvi meu problema.

  7. Henrique Golinelli says:

    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] “;

  8. Alessandro says:

    Obrigado pela dica

  9. Sergio Porssionatto says:

    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 !!!!

    • Thiago says:

      Na boa, a resposta está no tópico acima do seu. leia-o com atenção, que você terá a resposta que pediu.

    • Hugo Mendes says:

      Função:


      Espero ajuda, até a próxima!

    • Hugo Mendes says:

      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!

  10. Roberto Vieira says:

    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.

  11. Roberto Vieira says:

    *Tenho os “colchetes” para…

    • Roberto Vieira says:

      ** “Maior que” e “Menor que” e não colchetes, perdão.

  12. Temóteo says:

    Muito bom!
    Estou fascinado com PHP.

  13. Jose Antonio says:

    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.

  14. Wellerson says:

    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”

  15. paulo robson says:

    Bom post, valeu mesmo codare.net

  16. Elias says:

    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?

  17. robson says:

    muito bom artigo, tirou uma dúvida que eu tinha

    vlw

  18. Cristiano says:

    Charlles ,

    Conseguiu encontrar a solução? Se não, me envia um email que te ajudo ok?

    Email: cristiano.mcon@gmail.com

    Abraço.

Comments are closed.