2011-01-09 20 views
9

desea procesar un conjunto de cadenas, y recortar algunos terminación "myEnding" desde el extremo de cada cuerdasi existe.PHP: mejor método para recortar una subcadena de una cadena

¿Cuál es la forma más sencilla de hacerlo? Sé que todo es posible con regexp, pero parece ser una tarea sencilla, y me pregunto si existe una herramienta más simple para esto.

Gracias

Gidi

+0

Puede encontrar ['s ($ str) -> replaceSuffix ('myEnd ing ') '] (https://github.com/delight-im/PHP-Str/blob/ea3e40132e9d4ce27da337dae6286f2478b15f56/src/Str.php#L442) útil, como se encuentra en [esta biblioteca independiente] (https: // github .com/delight-im/PHP-Str). – caw

Respuesta

8

ima ir con preg_replace en este caso.

$output = preg_replace('/myEnding$/s', '', $input); 
+0

Tanques para la valiosa respuesta, aunque pedí soluciones sin regexp – shealtiel

+1

, me pidió la forma más sencilla de hacerlo. en este caso, la expresión regular fue la forma más simple. – dqhendricks

+0

sí, te votó – shealtiel

5

Prueba esto:

$s = "foobarmyEnding"; 
$toRemove = "myEnding"; 

$len = strlen($toRemove); 
if (strcmp(substr($s, -$len, $len), $toRemove) === 0) 
{ 
    $s = substr($s, 0, -$len); 
} 

ideone

-3

rtrimhttp://php.net/manual/en/function.rtrim.php

$str = "foobarmyEnding"; 
$str = rtrim($str, 'myEnding'); 
// str == "foobar" 

ltrim es el mismo acuerdo para el inicio de una cadena http://php.net/manual/en/function.ltrim.php

También es posible usar str_replace para reemplazar un término de búsqueda con una cadena vacía, pero su lento luego rtrim/ltrim si necesita modificar el inicio o el final de una cadena

+2

Realmente no. El segundo parámetro para 'rtrim' es una lista de caracteres para pelar. No se maneja como una cadena completa. – TaZ

+0

La pregunta era "recortar un final" myEnding "desde el final de cada cadena" –

+7

Si su cadena contiene alguno de esos caracteres directamente antes de "myEnding", también se eliminarán. Permítanme dar un ejemplo: lo que sucede cuando ingresa "HelloMikeShermanmyEnding". Esperarías que el resultado fuera "HelloMikeSherman" pero el resultado será "HelloMikeSherma". Porque "n" es parte de la lista de caracteres proporcionada a 'rtrim'. – TaZ

Cuestiones relacionadas