W3docs

strrpos()

A função strrpos() em PHP localiza a última ocorrência de uma substring em uma string e retorna sua posição baseada em zero.

Introdução

A função strrpos() encontra a última ocorrência de uma substring dentro de uma string e retorna sua posição baseada em zero (o índice do seu primeiro caractere). Pense nela como a imagem espelhada de strpos(), que encontra a primeira ocorrência: strpos() percorre da esquerda para a direita, enquanto strrpos() reporta a correspondência mais à direita.

Você recorre ao strrpos() sempre que se preocupa com o final de uma string — obter uma extensão de arquivo após o último ponto, dividir um caminho na última barra, ou remover tudo após o último separador.

Esta página aborda a sintaxe, a armadilha fácil de ignorar com false/0, como o parâmetro $offset (incluindo valores negativos) restringe a busca, e o irmão sem distinção de maiúsculas/minúsculas strripos().

Sintaxe

strrpos(string $haystack, string $needle, int $offset = 0): int|false
ParâmetroDescrição
$haystackA string em que se pesquisa.
$needleA substring a ser pesquisada.
$offsetOpcional. Altera onde a pesquisa começa/termina. Um offset positivo inicia a busca tantos caracteres a partir do início; um offset negativo encerra a busca tantos caracteres antes do final.

Valor de retorno: a posição inteira (contando a partir de 0) da última correspondência, ou false se $needle nunca aparecer em $haystack. A posição é um deslocamento em bytes, portanto, para texto multibyte (acentos UTF-8, emoji) use mb_strrpos().

Exemplo de Uso

Aqui está um exemplo de uso da função strrpos() em PHP:

Exemplo de strrpos() em PHP

php— editable, runs on the server

"Hello World" contém dois caracteres o — nos índices 4 e 7. Como strrpos() reporta o último, a saída é:

Found last occurrence of 'o' in 'Hello World' at position 7

Sempre compare com === / !== false

Este é o bug que pega todo mundo. Quando a correspondência está no início da string, strrpos() retorna 0, e o PHP trata 0 como falso. Uma verificação solta como if ($result) concluiria erroneamente "não encontrado":

<?php

// "h" is at position 0, so strrpos returns 0
$pos = strrpos("hello", "h");

if ($pos == false) {        // WRONG: 0 == false is true
  echo "not found";         // this prints, even though "h" WAS found
} else {
  echo "found at $pos";
}

A correção é o operador estrito !== false (usado no primeiro exemplo), que distingue o inteiro 0 do boolean false.

Restringindo a busca com $offset

Um offset negativo é a forma mais útil: ele diz ao strrpos() para parar de pesquisar tantos caracteres antes do final, o que é útil para ignorar uma parte final da string.

<?php

$path = "a/b/c/d";

// Last slash overall:
echo strrpos($path, "/");        // 5

// Last slash, ignoring the final 2 chars ("/d"):
echo "\n";
echo strrpos($path, "/", -3);    // 3

Um offset positivo inicia a busca tantos caracteres a partir do início, ignorando correspondências anteriores.

Busca sem distinção de maiúsculas/minúsculas: strripos()

strrpos() diferencia maiúsculas de minúsculas — strrpos("FOO", "o") retorna false. Quando a capitalização não importa, use strripos(), que possui assinatura idêntica mas corresponde independentemente da capitalização:

<?php

$str = "PHP is the Programming language: php";

echo strrpos($str, "php");   // 33  (only the lowercase one matches)
echo "\n";
echo strripos($str, "php");  // 33  (right-most match, ignoring case)

Funções relacionadas

  • strpos() — posição da primeira ocorrência.
  • stripos() — primeira ocorrência, sem distinção de maiúsculas/minúsculas.
  • substr() — extrai a parte da string após a posição encontrada.
  • str_replace() — substitui ocorrências sem precisar de sua posição.

Conclusão

strrpos() retorna a posição em bytes da última ocorrência de uma substring, ou false quando não há nenhuma — portanto, sempre compare seu resultado com !== false. Combine-o com um $offset negativo para ignorar texto final, mude para strripos() para correspondência sem distinção de maiúsculas/minúsculas, e use mb_strrpos() quando a string contiver caracteres multibyte.

Prática

Prática
O que a função 'strrpos' faz em PHP?
O que a função 'strrpos' faz em PHP?
Was this page helpful?