Ich muss einen Teilstring eines Strings entfernen, aber nur, wenn er sich am ENDE des Strings befindet.
Entfernen Sie beispielsweise 'string' am Ende der folgenden Strings:
"this is a test string" -> "this is a test "
"this string is a test string" - > "this string is a test "
"this string is a test" -> "this string is a test"
Irgendwelche Ideen ? Wahrscheinlich eine Art preg_replace, aber wie?
php
string
replace
preg-replace
Dylan
quelle
quelle
s($str)->replaceSuffix('string')
hilfreiche Informationen in dieser eigenständigen Bibliothek .Antworten:
Sie werden die Verwendung des
$
Zeichens bemerken , das das Ende einer Zeichenfolge kennzeichnet:$new_str = preg_replace('/string$/', '', $str);
Wenn es sich bei der Zeichenfolge um eine vom Benutzer bereitgestellte Variable handelt, sollten Sie sie
preg_quote
zuerst ausführen :$remove = $_GET['remove']; // or whatever the case may be $new_str = preg_replace('/'. preg_quote($remove, '/') . '$/', '', $str);
quelle
preg_*
Funktionsfamilien der Codierung bewusst? Was ist mit der[^[:alnum:]]
Charakterklasse?Die Verwendung von regulärem Ausdruck kann fehlschlagen, wenn der Teilstring Sonderzeichen enthält.
Folgendes funktioniert mit beliebigen Zeichenfolgen:
$substring = 'string'; $str = "this string is a test string"; if (substr($str,-strlen($substring))===$substring) $str = substr($str, 0, strlen($str)-strlen($substring));
quelle
$str = substr($str, 0, -strlen($substring));
als gute Alternative für Regex hochgestuft werden. Ich habe die gleiche Antwort für mein Problem gefunden. Ich würdepreg_*
jederzeit reine String-Funktionen über Familien verwenden, wenn dies meinen Zweck erfülltIch habe diese beiden Funktionen für den linken und rechten Schnitt eines Strings geschrieben:
/** * @param string $str Original string * @param string $needle String to trim from the end of $str * @param bool|true $caseSensitive Perform case sensitive matching, defaults to true * @return string Trimmed string */ function rightTrim($str, $needle, $caseSensitive = true) { $strPosFunction = $caseSensitive ? "strpos" : "stripos"; if ($strPosFunction($str, $needle, strlen($str) - strlen($needle)) !== false) { $str = substr($str, 0, -strlen($needle)); } return $str; } /** * @param string $str Original string * @param string $needle String to trim from the beginning of $str * @param bool|true $caseSensitive Perform case sensitive matching, defaults to true * @return string Trimmed string */ function leftTrim($str, $needle, $caseSensitive = true) { $strPosFunction = $caseSensitive ? "strpos" : "stripos"; if ($strPosFunction($str, $needle) === 0) { $str = substr($str, strlen($needle)); } return $str; }
quelle
Ich nehme an, Sie könnten einen regulären Ausdruck verwenden , der mit der Funktion übereinstimmt
string
und dann das Ende der Zeichenfolge koppeltpreg_replace()
.So etwas sollte gut funktionieren:
$str = "this is a test string"; $new_str = preg_replace('/string$/', '', $str);
Anmerkungen :
string
Streichhölzer ... na ja ...string
$
bedeutet Ende der ZeichenfolgeWeitere Informationen finden Sie im Abschnitt Pattern Syntax des PHP-Handbuchs.
quelle
preg_replace und dieses Muster: / string \ z / i
\ z bedeutet das Ende der Zeichenfolge
http://tr.php.net/preg_replace
quelle
Wenn Ihnen die Leistung nichts ausmacht UND der Teil der Zeichenfolge nur am Ende der Zeichenfolge platziert werden kann, können Sie Folgendes tun:
$string = "this is a test string"; $part = "string"; $string = implode( $part, array_slice( explode( $part, $string ), 0, -1 ) ); echo $string; // OUTPUT: "this is a test "
quelle
Sie können rtrim () verwenden .
php > echo rtrim('this is a test string', 'string'); this is a test
Dies funktioniert nur in einigen Fällen, da
'string'
nur eine Zeichenmaske und die Zeichenreihenfolge nicht eingehalten werden.quelle
trim()
Funktionen in einigen Fällen alle im zweiten Argument angegebenen Zeichenkombinationen entfernen .rtrim('teststring', 'string')
Gibt die Zeichenfolge "te" zurück, nicht "test", da das "st" am Ende von "test" aus Zeichen besteht, die Teil des Zeichensatzes im zweiten Argument von sindrtrim()
.echo str_replace( '#', 'string', rtrim( str_replace( 'string', '#', 'this is a test string' ), '#' ) );
, um nur die bestimmte Zeichenfolge und keine Kombination zu erhalten. Natürlich: Ihre Zeichenfolge muss nicht das Zeichen '#' enthalten, um zu funktionieren, und es ist definitiv keine elegante Lösung.