Si es posible, usando sólo las funciones estándar como PHP substr(),(), strrpos strpos(), etc.¿Cómo encontrar la penúltima aparición de un carácter dentro de una cadena?
Respuesta
primer lugar, encontrar la última posición:
$last = strrpos($haystack, $needle);
if ($last === false) {
return false;
}
A partir de ahí, encontrar la segunda pasada :
$next_to_last = strrpos($haystack, $needle, $last - strlen($haystack) - 1);
solución general para cualquier número de pasos hacia atrás:
function strrpos_count($haystack, $needle, $count)
{
if($count <= 0)
return false;
$len = strlen($haystack);
$pos = $len;
for($i = 0; $i < $count && $pos; $i++)
$pos = strrpos($haystack, $needle, $pos - $len - 1);
return $pos;
}
strpos
:
$pos = -1; $last = null; $secondLast = null;
while (($pos = strpos($haystack, $needle, $pos+1)) !== false) {
$secondLast = $last;
$last = $pos;
}
if (!is_null($secondLast)) {
echo 'second last occured on '.$secondLast;
}
buscar una expresión regular (PLZ me corrija si estoy equivocado, y la forma de escribirlo en PHP):
r'x[^x]*x[^x]*$'.replace('x',your_char)
Lee la pregunta nuevamente; No creo que el OP tenga permitido usar expresiones regulares. –
Esto es exactamente lo que estaba buscando, ¡así que tío! No voy a votar porque no responde exactamente la pregunta del OP, pero me alegra que hayas publicado tu respuesta. :) – jbaums
no creo que esto se puede hacer con strrpos porque el inicio de posición no funciona en la forma esperada.
No hay una manera obvia, pero esta función debería hacerlo. (No realmente probado, pero creo que funciona).
/** Return the position of the second last needle in haystack or false if nothing is found. I really hate functions with return types that depend on their input, but this function is made to look like the similary php functions (strpos, strrpos and so on) */
// Needle must be a char. If you want it to be a string instead, just substr
// length of needle instead of 1 in this example.
function findSecondLastChar($needle,$haystack) {
$found=0;
for($pos=strlen($haystack)-1;$pos>=0;$pos--) {
if(substr($haystack,$pos,1)==$needle) {
if($found++ == 1)
return $pos;
}
}
// If we reach this, nothing were found
return false;
}
Martin, estoy de acuerdo que strrpos es muy poco intuitivo, pero finalmente lo hice funcionar. Ver mi respuesta actualizada. –
- 1. ¿Cómo encontrar nth aparición de carácter en una cadena?
- 2. Cortar una cadena en la n. ° aparición de un carácter
- 3. Eliminar cadena después de la última aparición de un carácter
- 4. Strip cadena después de la tercera aparición del carácter python
- 5. Devuelve la parte de una cadena antes de la primera aparición de un carácter en php
- 6. ¿Cómo tomar una subcadena de una cadena dada hasta la primera aparición del carácter especificado?
- 7. ¿Cómo encontrar la última aparición de un número en una cadena usando Ruby?
- 8. Encontrar el índice de un carácter en una cadena
- 9. ¿Cómo puedo encontrar la primera aparición de una subcadena en una cadena de Python?
- 10. Encontrar ocurrencias de un carácter en una cadena con Ruby
- 11. Encuentra la última aparición de caracteres en una cadena
- 12. Encontrar la primera aparición de una cadena de un vector <string>
- 13. Reemplazar toda la aparición de una cadena en un elemento
- 14. ¿Obtiene el índice de la enésima aparición de una cadena?
- 15. ¿Cómo puedo encontrar el índice de un personaje dentro de una cadena en C?
- 16. Buscar Nth ocurrencia de un carácter en una cadena
- 17. Cómo encontrar la primera aparición con LINQ
- 18. UNIX: ¿Usando egrep o sed para encontrar la línea con la primera aparición de una cadena?
- 19. Encontrar un carácter específico en una cadena en Matlab
- 20. encontrar cadena dentro de un archivo comprimido en una carpeta
- 21. Eliminar un solo carácter de una cadena?
- 22. Expresión regular: coincide solo con la aparición no repetida de un carácter
- 23. ¿Se elimina la primera aparición de palabra de una cadena?
- 24. ¿Reemplazar la primera aparición solamente de una cadena?
- 25. Bash- ¿cómo leer la penúltima línea de un archivo?
- 26. Adjuntar a la penúltima li
- 27. La forma más rápida de obtener un carácter dentro de una cadena dado el índice (PHP)
- 28. Encontrar caracteres en mayúsculas dentro de una cadena
- 29. Eliminar un carácter de una cadena
- 30. Reemplazar una sola aparición de la cadena Obj-c
Debe tenerse en cuenta que esto no funcionará correctamente en PHP 4. –
Bah, no probar esta totalmente. Deberias hacer eso. –