2011-03-16 18 views
8

mi variables tienen el siguiente aspecto:Retire todo antes de la primera "" en una cadena

AAAAAAA, BB CCCCCCCC

AAAA, BBBBBB CCCCCC

Me gustaría eliminar todo antes del ","

Los resultados deberían verse como:

BB CCCCCCCC

BBBBBB CCCCCC

he trabajado a cabo esta para eliminar todo después de la "":

list($xxx) = explode(',', $yyyyy); 

por desgracia, no saben cómo conseguir que funcione para eliminar todo ANTES del ","

¡Gracias!

+0

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

Respuesta

15

yo no recomendaría el uso de explotar, ya que causa más problemas si hay más de una coma.

// removes everything before the first , 
$new_str = substr($str, ($pos = strpos($str, ',')) !== false ? $pos + 1 : 0); 

Editar:

if(($pos = strpos($str, ',')) !== false) 
{ 
    $new_str = substr($str, $pos + 1); 
} 
else 
{ 
    $new_str = get_last_word($str); 
} 
+0

este es el que debe utilizar, en mi humilde opinión – droope

+0

+1 - Es más rápido y más legible (en mi humilde opinión) que la expresión regular. Ve con esto – Carpetsmoker

+0

¡Gracias, funcionó de maravilla! – Andrej

1

que puede hacer:

$arr = explode(',', $yyyyy); 
unset($arr[0]); 
echo implode($arr); 
+0

Creo que esto es bueno. Aunque necesitas hacer un eco implode (',', $ arr); para no perder las otras comas. – embe

+0

@embe no hay otras comas en el ejemplo de la pregunta – Neal

+0

Verdadero. Fue en mi caso, y para responder "Eliminar todo antes del primero", "en una cadena", creo que es bueno agregar. Gracias por una buena solución. – embe

1
list(,$xxx) = explode(',', $yyyyy, 2); 
25

Como se trata de una manipulación simple cadena, puede utilizar el siguiente para eliminar todos los caracteres antes de la primera coma:

$string = preg_replace('/^[^,]*,\s*/', '', $input); 

preg_replace() permite usted para reemplazar partes de una cadena basada en una expresión regular. Echemos un vistazo a la expresión regular.

  • / is the start delimiter
    • ^ is the "start of string" anchor
    • [^,] every character that isn't a comma (^ negates the class here)
      • * repeated zero or more times
    • , regular comma
    • \s any whitespace character
      • * repeated zero or more times
  • / end delimiter
+2

Las expresiones regulares son tu amigo – Canuteson

+0

¿Qué sucede si quiero eliminar todos los caracteres antes de ** e incluso ** comas? –

+0

He estado buscando lo mismo. reemplazando el '''' con '',' 'para que el código completo se convierta en:' $ string = preg_replace ('/^ [^,] *, \ s */',', ', $ input); ' – hyip

2

intente esto se pone el último cosas después de los, si no, está presente se comprobará a partir del último espacio, Lo envolví en una función para hacerlo más fácil:

<?php 
$value='AAAA BBBBBB CCCCCC'; 
function checkstr($value){ 
    if(strpos($value,',')==FALSE){ 
     return trim(substr(strrchr($value, ' '), 1)); 
    }else{ 
     return trim(substr($value, strpos($value,',')),','); 
    } 
} 

echo checkstr($value); 
?> 
+0

¡esto también funciona bien !, pero ¿cómo puedo decirle al script que use la última palabra de la cadena en caso de que no haya ","? – Andrej

0

Regex es generalmente costoso y no lo recomendaría para algo tan simple como esto. Usar explotar y limitarlo a 2 probablemente resulte en el mismo tiempo de ejecución que usar str_pos pero no tendría que hacer nada más para generar la cadena requerida como está almacenada en el segundo índice.

//simple answer 
$str = explode(',', $yyyyy,2)[1]; 

O

//better 

$arr = explode(',', $yyyyy,2); 
$str = isset($arr[1]) ? $arr[1] : ''; 
Cuestiones relacionadas