strripos()
A função strripos() do PHP localiza a última ocorrência de uma substring sem distinção de maiúsculas e minúsculas dentro de uma string.
Introdução
A função strripos() no PHP encontra a posição da última ocorrência de uma substring dentro de outra string, ignorando maiúsculas e minúsculas. O nome se decompõe em str (string) + r (reverso, ou seja, busca da direita) + i (sem distinção de maiúsculas) + pos (posição).
É o par insensível a maiúsculas de strrpos(): strripos("Hello", "L") e strripos("Hello", "l") retornam a mesma posição, enquanto strrpos() trataria L e l como caracteres diferentes.
Este capítulo aborda a sintaxe, o valor de retorno (e o problema do false que você deve tratar), o parâmetro opcional $offset — incluindo offsets negativos — e como strripos() se relaciona com as outras funções de busca em strings.
Sintaxe
strripos(string $haystack, string $needle, int $offset = 0): int|false| Parâmetro | Descrição |
|---|---|
$haystack | A string em que se deseja pesquisar. |
$needle | A substring a ser pesquisada. |
$offset | Opcional. Onde iniciar a pesquisa. Um valor positivo ignora os primeiros $offset caracteres; um valor negativo faz a busca parar tantos caracteres antes do final da string. Padrão é 0. |
Valor de retorno: o índice baseado em zero da última ocorrência correspondente, ou false se $needle não for encontrado.
Sempre compare com !==
strripos() retorna 0 quando a correspondência está no início da string, e 0 é falsy no PHP. Uma verificação simples como if (strripos(...)) trataria erroneamente uma correspondência na posição zero como "não encontrado". Sempre compare com false usando o operador estrito !==:
<?php
$haystack = "Apple pie";
$pos = strripos($haystack, "a"); // matches "A" at index 0
if ($pos !== false) {
echo "Found at index $pos"; // Found at index 0
} else {
echo "Not found";
}Exemplo básico
Há dois caracteres o/O em Hello World — um em Hello (índice 4) e outro em World (índice 7). Como strripos() retorna a última correspondência, a saída é:
Found last occurrence of 'o' in 'Hello World' at position 7Correspondência sem distinção de maiúsculas
A pesquisa trata letras maiúsculas e minúsculas como iguais, portanto a capitalização de $needle não importa:
<?php
$string = "Hello World, hello PHP";
echo strripos($string, "hello"), "\n"; // 13 — matches "hello" in "hello PHP"
echo strripos($string, "HELLO"), "\n"; // 13 — same match, case ignoredO último hello/HELLO/Hello na string começa no índice 13, independentemente de como você capitaliza o needle.
Usando o parâmetro $offset
Um offset positivo inicia a pesquisa após os primeiros $offset caracteres:
<?php
$string = "Hello World";
echo strripos($string, "o", 5), "\n"; // 7 — only the "o" in "World" is consideredUm offset negativo faz a pesquisa parar tantos caracteres antes do final da string, o que é útil para encontrar a última correspondência em tudo exceto uma parte final:
<?php
$string = "abcabc";
echo strripos($string, "b", -2), "\n"; // 4 — last "b" within the truncated search windowFunções relacionadas
Escolha a função de pesquisa correta para cada situação:
strrpos()— igual astrripos(), mas com distinção de maiúsculas.stripos()— encontra a primeira ocorrência sem distinção de maiúsculas.strpos()— encontra a primeira ocorrência com distinção de maiúsculas.strstr()— retorna o restante da string a partir da primeira correspondência, em vez de uma posição.substr()— extrai parte de uma string após você conhecer a posição.
| Função | Direção | Diferencia maiúsculas? |
|---|---|---|
strpos() | primeira correspondência | sim |
stripos() | primeira correspondência | não |
strrpos() | última correspondência | sim |
strripos() | última correspondência | não |
Conclusão
strripos() localiza a última ocorrência sem distinção de maiúsculas de uma substring e retorna seu índice, ou false quando não há correspondência. Lembre-se de testar o resultado com !== para que uma correspondência na posição zero não seja confundida com uma falha, e use $offset (positivo ou negativo) quando precisar limitar a janela de pesquisa. Quando você precisar da primeira correspondência, ou quando a diferenciação de maiúsculas for importante, use uma das funções relacionadas acima.