2010-12-30 2 views

Antwort

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

Das gleiche wie meine Lösung, aber Sie die Klammer nicht benötigen, da sie im Speicher den Inhalt nach dem ‚_‘ und es – spuas

11

Die folgende viel schneller sein würde;

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

+1 Viele schneller benötigt wird, nicht als preg_replace – r92

+1

Was halten würden, wenn es ist kein _ in der Zeichenfolge? – Gumbo

+1

Dann müssen Sie etwas wie tun; $ str = 'Frohe Weihnachten'; $ str = ($ pos = strpos ($ str, '_'))? substr ($ str, 0, $ pos): $ str; – Erik

0

Ihr Muster ist falsch, es sollte auf '/_.*/' so: ''

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

Die bedeutet ein beliebiges Zeichen, einen Blick reg_ex Tutorial

1

es ist „und alles nach dem Unterstrich“ haben, so verwenden

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

Sie an allen regulären Ausdrücken müssen nicht, Sie explode (substr ist wahrscheinlich verwenden könnte besser, aber ich möchte eine andere Alternative zeigen):

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

Ihre Ausdrücke nicht funktioniert, weil es nur eine variable Anzahl von _ übereinstimmt, nicht andere chara cters.

6

Das Muster /_*/ entspricht null oder mehr aufeinanderfolgenden _. So wird es merry_christmas in merrychristmas werden.

Was Sie brauchen, ist /_.*/s dass ein _ von null oder mehr beliebige Zeichen gefolgt entspricht (man beachte die s modifier):

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

Aber wie die anderen schon erwähnt haben, könnten mit regulären Ausdrücken nicht der beste Weg sein . Berücksichtigen Sie auch die anderen erwähnten Lösungen, die grundlegende Zeichenfolgenoperationen verwenden. Nicht alle von ihnen sind so lesbar wie ein regulärer Ausdruck wie der obige (wichtiger: sie könnten ein unerwartetes Ergebnis zurückgeben, wenn in der Zeichenfolge kein _ vorhanden ist). Aber unter bestimmten Umständen könnten sie schneller sein.

1

Vergessen Sie nicht , insbesondere den $before_needle Parameter, der ab PHP 5.3.0 verfügbar ist.

$stub = strstr($string, '_', true) ?: $string; 
Verwandte Themen