W3docs

strrpos()

La función strrpos() en PHP encuentra la última ocurrencia de una subcadena en una cadena y devuelve su posición basada en cero.

Introducción

La función strrpos() encuentra la última ocurrencia de una subcadena dentro de una cadena y devuelve su posición basada en cero (el índice de su primer carácter). Piénsela como la imagen especular de strpos(), que encuentra la primera ocurrencia: strpos() escanea de izquierda a derecha, mientras que strrpos() reporta la coincidencia más a la derecha.

Se usa strrpos() cuando le interesa el final de una cadena — obtener la extensión de un archivo después del último punto, dividir una ruta en su última barra, o eliminar todo lo que hay después del último separador.

Esta página cubre la sintaxis, el problema fácil de pasar por alto con false/0, cómo el parámetro $offset (incluyendo valores negativos) restringe la búsqueda, y el hermano sin distinción de mayúsculas strripos().

Sintaxis

strrpos(string $haystack, string $needle, int $offset = 0): int|false
ParámetroDescripción
$haystackLa cadena en la que buscar.
$needleLa subcadena que se desea encontrar.
$offsetOpcional. Cambia dónde comienza o termina la búsqueda. Un offset positivo inicia la búsqueda a tantos caracteres desde el inicio; un offset negativo detiene la búsqueda a tantos caracteres antes del final.

Valor de retorno: la posición entera (contando desde 0) de la última coincidencia, o false si $needle nunca aparece en $haystack. La posición es un desplazamiento en bytes, por lo que para texto multibyte (acentos UTF-8, emoji) use mb_strrpos() en su lugar.

Ejemplo de Uso

A continuación se muestra un ejemplo de uso de la función strrpos() en PHP:

Ejemplo de PHP strrpos()

php— editable, runs on the server

"Hello World" contiene dos caracteres o — en el índice 4 y en el índice 7. Como strrpos() reporta el último, la salida es:

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

Siempre compare con === / !== false

Este es el error que afecta a todos. Cuando la coincidencia está al comienzo de la cadena, strrpos() devuelve 0, y PHP trata 0 como un valor falso. Una comprobación no estricta como if ($result) concluiría incorrectamente "no 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";
}

La solución es el operador estricto !== false (usado en el primer ejemplo), que distingue el entero 0 del boolean false.

Restringir la búsqueda con $offset

Un offset negativo es la forma más útil: le indica a strrpos() que deje de buscar esa cantidad de caracteres antes del final, lo cual es útil para ignorar una parte final de la cadena.

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

Un offset positivo comienza la búsqueda a tantos caracteres desde el inicio, omitiendo las coincidencias anteriores.

Búsqueda sin distinción de mayúsculas: strripos()

strrpos() distingue entre mayúsculas y minúsculas — strrpos("FOO", "o") devuelve false. Cuando el caso no debe importar, use strripos(), que tiene la misma firma pero coincide independientemente del caso:

<?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)

Funciones Relacionadas

  • strpos() — posición de la primera ocurrencia.
  • stripos() — primera ocurrencia, sin distinción de mayúsculas.
  • substr() — extrae la parte de la cadena después de la posición encontrada.
  • str_replace() — reemplaza ocurrencias sin necesitar su posición.

Conclusión

strrpos() devuelve la posición en bytes de la última ocurrencia de una subcadena, o false cuando no existe ninguna — así que siempre compare su resultado con !== false. Combínela con un $offset negativo para ignorar texto final, cambie a strripos() para coincidencias sin distinción de mayúsculas, y use mb_strrpos() cuando la cadena contenga caracteres multibyte.

Práctica

Práctica
¿Qué hace la función 'strrpos' en PHP?
¿Qué hace la función 'strrpos' en PHP?
Was this page helpful?