2010-12-30 12 views

Respuesta

0
preg_replace('/_(.*)/','',$string); 
+0

El mismo que mi solución, pero que no es necesario el paréntesis, ya que mantendrían en la memoria el contenido después de la '_' y que no es necesario – spuas

11

El siguiente sería mucho más rápido;

$str = 'merry_christmas'; 
$str = substr($str, 0, strpos($str, '_')); 
+1

1 Mucho más rápido que preg_replace – r92

+1

Qué pasa si hay ¿No hay '_' en la cadena? – Gumbo

+1

Entonces necesitas hacer algo como; $ str = 'feliz Navidad'; $ str = ($ pos = strpos ($ str, '_'))? substr ($ str, 0, $ pos): $ str; – Erik

0

Su patrón es incorrecto, debe configurarlo para '/_.*/', así: ''

$string = preg_replace('/_.*/','',$string); 

El significa cualquier carácter, tiene un tutorial mirada reg_ex

1

es "y todo después de que el guión", a fin de utilizar

$string = 'merry_christmas'; 
$string = preg_replace('/_.*/','',$string); 
echo $string; 
3

No es necesario expresiones regulares en absoluto, usted podría utilizar explode (substr es probablemente mejor, pero quiero mostrar otra alternativa):

$string = array_shift(explode('_', $string)); 

Sus expresiones no funciona, ya que sólo se coincide con un número variable de _, no otra Chara cters.

6

El patrón /_*/ coincide con cero o más _ consecutivos. Por lo tanto, convertirá merry_christmas en merrychristmas.

Lo que se necesita es /_.*/s que coincide con un _ seguido de cero o más caracteres arbitrarios (tenga en cuenta la s modifier):

$string = preg_replace('/_.*/s', '', $string); 

Pero a medida que los otros ya han mencionado, el uso de expresiones regulares podría no ser la mejor manera . Considere también las otras soluciones mencionadas utilizando operaciones básicas de cadenas. No todos son tan legibles como usar una expresión regular como la de arriba (más importante: pueden devolver un resultado inesperado si no hay _ en la cadena). Pero podrían ser más rápidos en ciertas circunstancias.

1

No olvide strstr(), en particular el parámetro $before_needle que está disponible a partir de PHP 5.3.0.

$stub = strstr($string, '_', true) ?: $string; 
Cuestiones relacionadas