2012-01-05 7 views
4

echo $string может предоставить любой текст.заменить только в конце строки

Как мне удалить слово "blank", только если это последнее слово из $string?

Итак, если у нас есть предложение, такое как "Steve Blank is here" - ничего не следует удалять, в противном случае, если предложение "his name is Granblank", тогда "Blank" слово должно быть удалено.

ответ

12

Вы можете легко сделать это с помощью регулярного выражения. \b гарантирует, что он удаляется только в том случае, если это отдельное слово.

$str = preg_replace('/\bblank$/', '', $str); 
+0

этот код заменит «пустым» везде, следует заменить только если он является последним вхождением в строке , – Jasper

+3

Неверно. Вот для чего '' '. – EboMike

+3

@Steve вы попробовали этот код? Он работает на случай использования, который вы предлагаете. $ указывает совпадение только в том случае, если пустое значение находится в конце строки. Хотя в вашем конкретном случае использования регулярное выражение будет/blank $ /, так как вы не заботитесь о границе слова. – Owen

1

Попробуй ниже:

$str=trim($str); 
    $strlength=strlen($str); 

    if(strcasecmp(substr($str,($strlength-5),$strlength),'blank')==0) 
     echo $str=substr($str,0,($strlength-5)) 

Не используйте preg_match unlesss не требуется, сам PHP рекомендует использовать строковые функции над регулярными выражениями функций, когда матч прост. от preg_matc h справочная страница

+0

Немного чересчур сложный, на мой взгляд. – buley

+1

Не сложный, чем регулярное выражение и отдельная функция. Вы можете сделать проще, выполнив шаги. Мы просто используем встроенные средства. –

+0

Да, но учитывайте ремонтопригодность этого решения по сравнению с принятым ответом ... – cmbuckley

-2

ThiefMaster совершенно верный. Техника, которая не связана с символом регулярного выражения $, будет использовать rtrim.

$trimmed = rtrim($str, "blank"); 
var_dump($trimmed); 

^Это если вы хотите удалить последние символы строки. Если вы хотите, чтобы удалить последнее слово:

$trimmed = rtrim($str, "\sblank"); 
var_dump($trimmed); 
+0

не заменит «пустым» словом, как «Granblank» в конце строки – Jasper

+0

А как его собственное определение говорит «только если это последнее слово $ string "not", только если это последние символы строки. " Ред. Если это так, то 'rtrim' еще более привлекателен. – buley

+0

Это то, о чем вы просили, вы сказали, что если пустое является последним СЛОВОМ строки, а не «если строка заканчивается« пустой ».» Однако это не получится, если это будет «Gran.blank». – EboMike

3

В качестве варианта ответа Teez в:

/** 
* A slightly more readable, non-regex solution. 
*/ 
function remove_if_trailing($haystack, $needle) 
{ 
    // The length of the needle as a negative number is where it would appear in the haystack 
    $needle_position = strlen($needle) * -1; 

    // If the last N letters match $needle 
    if (substr($haystack, $needle_position) == $needle) { 
     // Then remove the last N letters from the string 
     $haystack = substr($haystack, 0, $needle_position); 
    } 

    return $haystack; 
} 

echo remove_if_trailing("Steve Blank is here", 'blank'); // OUTPUTS: Steve blank is here 
echo remove_if_trailing("his name is Granblank", 'blank'); // OUTPUTS: his name is Gran 
Смежные вопросы