webentwicklung-frage-antwort-db.com.de

Wie bekomme ich alles nach einem bestimmten Charakter?

Ich habe einen String und ich möchte alles nach einem bestimmten Wert bekommen. Die Zeichenfolge beginnt immer mit einer Reihe von Zahlen und dann mit einem Unterstrich. Ich möchte den Rest der Saite nach dem Unterstrich erhalten. Wenn ich zum Beispiel die folgenden Zeichenfolgen habe und was ich gerne zurückgeben möchte:

"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"

Wie kann ich so etwas tun?

105
user1048676

Die strpos() ermittelt den Versatz des Unterstrichs, dann holt substr alles aus diesem Index plus 1.

$data = "123_String";    
$whatIWant = substr($data, strpos($data, "_") + 1);    
echo $whatIWant;

Wenn Sie auch prüfen möchten, ob der Unterstrich (_) in Ihrer Zeichenfolge vorhanden ist, bevor Sie versuchen, sie zu erhalten, können Sie Folgendes verwenden:

if (($pos = strpos($data, "_")) !== FALSE) { 
    $whatIWant = substr($data, $pos+1); 
}
247
databyss

strtok ist eine übersehene Funktion für diese Art von Dingen. Es soll ziemlich schnell sein.

$s = 233718_This_is_a_string;
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' ); 

Eine leere Zeichenfolge wie diese bewirkt, dass der Rest der Zeichenfolge zurückgegeben wird.

NB: Wenn nach dem '_' gar nichts wäre, würden Sie einen FALSE-Wert für $allTheRest erhalten, der, wie in der Dokumentation angegeben, mit === getestet werden muss, um von anderen Falsey-Werten zu unterscheiden.

9
mike rodent

Hier ist die Methode mit explode:

$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string

oder:

$text = @end((explode('_', '233718_This_is_a_string', 2)));

Durch Angabe von 2 für den Parameter limit in explode() wird ein Array mit 2 maximalen Elementen zurückgegeben, die durch das Trennzeichen für Zeichenfolgen getrennt sind. Bei Rückgabe des zweiten Elements ([1]) wird der Rest der Zeichenfolge angegeben.


Hier ist ein weiterer Einzeiler mit strpos (wie von @flu vorgeschlagen):

$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string
8
kenorb

wenn jemand den ersten Teil der Zeichenfolge extrahieren muss, können Sie versuchen,

Abfrage:

$s = "This_is_a_string_233718";

$text = $s."_".substr($s, 0, strrpos($s, "_"));

Ausgabe:

This_is_a_string

1
Ady

Ein anderer einfacher Weg mit strchr () oder strstr () :

$str = '233718_This_is_a_string';

echo ltrim(strstr($str, '_'), '_'); // This_is_a_string
0
nggit