¿Alguien sabe de una forma muy rápida de reemplazar la última ocurrencia de una cadena con otra cuerda en una cadena?PHP ¿Reemplazar la última ocurrencia de una cadena en una cadena?
Respuesta
Se puede utilizar esta función:
function str_lreplace($search, $replace, $subject)
{
$pos = strrpos($subject, $search);
if($pos !== false)
{
$subject = substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
Por motivos de seguridad, agregaría un cheque que 'strrpos' no devuelve falso, pero de lo contrario está bien. – Wrikken
Sí, tienes razón. Actualizaré mi respuesta. – Mischa
Esto seguía siendo cierto sin importar nada.Considere modificarlo para que sea: if ($ pos) { $ subject = substr_replace ($ subject, $ replace, $ pos, strlen ($ search)); \t return $ subject; } else { \t return false; } – Jazzy
Esto también funcionará:
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '(.*?)~', '$1' . $replace . '$2', $subject, 1);
}
ACTUALIZACIÓN versión un poco más concisa (http://ideone.com/B8i4o):
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1);
}
¿Lo estoy haciendo mal? Si es así solo ignórame :) ||| echo str_lreplace ("x", "y", "esta x o esa x"); => Salida: "y" Ver: http://www.ideone.com/UXuTo – edorian
@edorian: ¡Vaya! Lo siento, publiqué eso con prisa, la versión correcta está aquí: http://ideone.com/vR073. –
$string = 'this is my world, not my world';
$find = 'world';
$replace = 'farm';
$result = preg_replace(strrev("/$find/"),strrev($replace),strrev($string),1);
echo strrev($result); //output: this is my world, not my farm
Otro 1-liner pero sin preg:
$subject = 'bourbon, scotch, beer';
$search = ',';
$replace = ', and';
echo strrev(implode(strrev($replace), explode(strrev($search), strrev($subject), 2))); //output: bourbon, scotch, and beer
Sería divertido ver a alguien compararlo con el preg –
FWIW, la solución aceptada es aproximadamente un 35% más rápida que esta solución. – JustCarty
Utilice el "$" en una expresión reg para que coincida con el final de la cadena
$string = 'The quick brown fox jumps over the lazy fox';
echo preg_replace('/fox$/', 'dog', $string);
//output
'The quick brown fox jumps over the lazy dog'
la siguiente solución más compacta utiliza el PCRE positive lookahead assertion para que coincida la última aparición de la subcadena de interés, es decir, una aparición de la subcadena que no es seguida por ninguna otra ocurrencia de la misma subcadena. Por lo tanto, el ejemplo reemplaza al last 'fox'
con 'dog'
.
$string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!';
echo preg_replace('/(fox(?=.*fox.*))/', 'dog', $string);
SALIDA:
The quick brown fox, fox, fox jumps over the lazy dog!!!
Parece que no funciona – Ivan
La idea es buena, pero el código no lo es. Debe ser: '$ string = '¡El zorro marrón rápido, zorro, zorro salta sobre el zorro perezoso!'; echo preg_replace ('/ (zorro (?!. * Zorro)) /', 'perro', $ cadena); ' – Roemer
De hecho, el código que publiqué cambia todas las instancias de" zorro ", excepto el último "perro", pero lo que queremos es exactamente lo contrario. Gracias por señalar que reemplazando? = Con?! arregla el problema –
Sólo una línea de código (respuesta tardía pero vale la pena añadir que):
$string = 'The quick brown fox jumps over the lazy dog';
$find_me = 'dog';
preg_replace('/'. $find_me .'$/', '', $string);
el final $ indica el final de la cadena.
usted puede hacer esto:
$str = 'Hello world';
$str = rtrim($str, 'world') . 'John';
El resultado es 'Hola John';
Saludos
Esto funciona siempre que no haya caracteres repetidos. En mi situación, estoy eliminando el número de página de la fecha de archivo, así que tengo "2015-12/2" y quita todo/y todos 2 de la final convirtiéndose en "2015-1". – Mike
Puede utilizar strrpos() para encontrar último partido.
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
$string[$findChar]=".";
echo $string;
Salida: picture_0007.value
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
if($findChar !== FALSE) {
$string[$findChar]=".";
}
echo $string;
Aparte de los errores en el código, Faruk Unal tiene la mejor anwser. Una función hace el truco.
Debe verificar si ** $ findChar ** no es falso (de la misma manera que en la respuesta aceptada). Si la cadena no contiene cadenas buscadas, recibirá un aviso y el primer carácter será reemplazado. – shaggy
- 1. XSLT: Encontrar la última ocurrencia de una cadena
- 2. cómo reemplazar la última ocurrencia de una palabra en javascript?
- 3. tsql última "ocurrencia de" dentro de una cadena
- 4. Perl buscar y reemplazar la última ocurrencia de caracteres
- 5. Reemplazar la última palabra en la cadena
- 6. expresión regular que concuerda la última ocurrencia de punto en una cadena
- 7. Ocurrencia de secuencia secundaria en una cadena
- 8. Reemplazar última parte de la cadena de
- 9. XSLT 1.0 - Encontrar la última ocurrencia y tomando cadena antes
- 10. Reemplazar la última aparición de caracteres en la cadena
- 11. Reemplazar una parte específica de una cadena de consulta PHP
- 12. ¿Cómo reemplazar una variable dentro de una cadena con PHP?
- 13. cadena transversal C: obtenga la última palabra de una cadena
- 14. rreplace - ¿Cómo reemplazar la última aparición de una expresión en una cadena?
- 15. php - reemplazar ocurrencias de cadena
- 16. Separar una cadena de la segunda ocurrencia del carácter
- 17. ¿Reemplazar cadena de PHP simple?
- 18. Buscar Nth ocurrencia de un carácter en una cadena
- 19. Reemplazar una sola aparición de la cadena Obj-c
- 20. Separar una cadena en el primer espacio de ocurrencia blanco
- 21. Reemplazar una cadena ubicada entre
- 22. php sustituir primera ocurrencia de la cadena desde la posición 0º
- 23. Reemplazar "\\" con "\" en una cadena en C#
- 24. Reemplazar varios caracteres en una cadena (XSLT)
- 25. Reemplazar nuevas líneas en una cadena Unicode
- 26. Cómo reemplazar ï ¿½ en una cadena
- 27. sed reemplazar cadena en una primera línea
- 28. Cómo reemplazar caracteres en una cadena java?
- 29. Reemplazar varios caracteres en una cadena
- 30. Seleccionar una última palabra de una cadena en xslt
Puede encontrar ['s ($ str) -> replaceLast ($ search, $ replace)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str. php # L305) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw