2011-01-09 18 views
9

Chcesz przetwarzać komplet strun, a trochę przyciąć końcówkę „myEnding” od końca każdego łańcucha jeśli istnieje.PHP: Najlepszym sposobem, aby przyciąć podciągu z ciągiem

Jaki jest najprostszy sposób to zrobić? Wiem, że wszystko jest możliwe z wyrażeniem regularnym, ale wydaje się, że jest to proste zadanie i zastanawiam się, czy istnieje prostsze narzędzie do tego.

Dzięki

Gidi

+0

Możesz znaleźć ['s ($ str) -> replaceSuffix ('myEnd ing ') '] (https://github.com/delight-im/PHP-Str/blob/ea3e40132e9d4ce27da337dae6286f2478b15f56/src/Str.php#L442) pomocne, jak można znaleźć w [tej samodzielnej bibliotece] (https: // github .com/delight-im/PHP-Str). – caw

Odpowiedz

8

ima go z preg_replace na ten jeden.

$output = preg_replace('/myEnding$/s', '', $input); 
+0

Zbiorniki na cenną odpowiedź, mimo że poprosiłem o rozwiązania non rexxp – shealtiel

+1

poprosiłeś o najprostszy sposób to zrobić. w tym przypadku regex był najprostszym sposobem. – dqhendricks

+0

tak, zagłosował na ciebie – shealtiel

5

Spróbuj tego:

$s = "foobarmyEnding"; 
$toRemove = "myEnding"; 

$len = strlen($toRemove); 
if (strcmp(substr($s, -$len, $len), $toRemove) === 0) 
{ 
    $s = substr($s, 0, -$len); 
} 

ideone

-3

rtrimhttp://php.net/manual/en/function.rtrim.php

$str = "foobarmyEnding"; 
$str = rtrim($str, 'myEnding'); 
// str == "foobar" 

ltrim jest taka sama sprawa dla początku łańcucha http://php.net/manual/en/function.ltrim.php

Można także użyć str_replace zastąpić wyszukiwany termin z pustym ciągiem ale jego wolniejsze następnie rtrim/ltrim, jeśli chcesz zmienić początek lub koniec ciągu znaków

+2

Niezupełnie. Drugim parametrem dla 'rtrim' jest lista znaków do usunięcia. Nie jest traktowany jako cały ciąg. – TaZ

+0

Pytanie brzmiało "przyciąć niektóre zakończenie" myEnding "od KOŃCA każdego ciągu" –

+7

Jeśli twój ciąg zawiera którykolwiek z tych znaków bezpośrednio przed "myEnding", zostaną one również usunięte. Podam przykład: co się stanie, gdy wpiszesz "HelloMikeShermanmyEnding". Można oczekiwać, że wyjście będzie "HelloMikeSherman", ale wynik będzie "HelloMikeSherma"! Ponieważ "n" jest częścią listy znaków dostarczonej do 'rtrim'. – TaZ

Powiązane problemy