2010-10-21 29 views
7

que tienen cadenas que se parece a esto:Eliminar caracteres después de la cadena?

John Miller-Doe - Name: jdoe 
Jane Smith - Name: jsmith 
Peter Piper - Name: ppiper 
Bob Mackey-O'Donnell - Name: bmackeyodonnell 

Estoy tratando de eliminar todo después del segundo guión, por lo que me queda:

John Miller-Doe 
Jane Smith 
Peter Piper 
Bob Mackey-O'Donnell 

Así que, básicamente, I' Estoy tratando de encontrar una manera de cortarlo justo antes de "- Nombre:". He estado jugando con substr y preg_replace, pero parece que no puedo obtener los resultados que espero ... ¿Alguien puede ayudar?

+0

¿Puede haber un 'John Miller - Doe - Nombre:' ? ¿Siempre habrá 'Nombre:' al final? –

+0

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

Respuesta

19

Suponiendo que las cuerdas siempre tendrán este formato, una posibilidad es:

$short = substr($str, 0, strpos($str, ' - Name:')); 

Referencia: substr, strpos

1
$string="Bob Mackey-O'Donnell - Name: bmackeyodonnell"; 
$parts=explode("- Name:",$string); 
$name=$parts[0]; 

Aunque la solución después de la mía es mucho más agradable ...

2

Todo después de justo antes del segundo guión, ¿correcto? Un método sería

$string="Bob Mackey-O'Donnell - Name: bmackeyodonnel"; 
$remove=strrchr($string,'-'); 
//remove is now "- Name: bmackeyodonnell" 
$string=str_replace(" $remove","",$string); 
//note $remove is in quotes with a space before it, to get the space, too 
//$string is now "Bob Mackey-O'Donnell" 

Sólo pensé en tirar eso como una alternativa extraña.

+0

Gracias por compartir mate. ¡amo de esta manera y me funciona! –

7

Uso preg_replace() con el patrón / - Name:.*/:

<?php 
$text = "John Miller-Doe - Name: jdoe 
Jane Smith - Name: jsmith 
Peter Piper - Name: ppiper 
Bob Mackey-O'Donnell - Name: bmackeyodonnell"; 

$result = preg_replace("/ - Name:.*/", "", $text); 
echo "result: {$result}\n"; 
?> 

Salida:

result: John Miller-Doe 
Jane Smith 
Peter Piper 
Bob Mackey-O'Donnell 
+0

Muchas gracias, esta respuesta podría usarse para cualquier cadena. –

0

una forma más limpia:

$find = 'Name'; 
$fullString = 'aoisdjaoisjdoisjdNameoiasjdoijdsf'; 
$output = strstr($fullString, $find, true) . $find ?: $fullString; 
Cuestiones relacionadas