2013-01-26 5 views
0

Я хотел бы взять строку и искать конкретные слова и использовать их взаймы. Итак, для строки типа «Lorem ipsum dolor sit amet, consectetur adipisicing elit.», Я хочу иметь возможность только капировать ipsum и adipisicing. Таким образом, в основном накладывать фильтр капитализации на определенные слова.Captilizing определенные слова в строке PHP

Как это можно сделать?

+0

regex поможет. см. http://www.php.net/manual/en/function.preg-replace.php – farmer1992

+0

'str_replace' будет работать ... –

ответ

0

Есть слишком много способов сделать это ...

5

Не используйте регулярное выражение для этого, str_replace - самый чистый и простой способ:

$str = str_replace(
    array('ipsum','adipisicing'), 
    array('Ipsum','Adipisicing'), 
    'Lorem ipsum dolor sit amet, consectetur adipisicing elit.' 
); 

Или немного хитрее:

$words = array('ipsum', 'adipisicing'); 
$str = str_replace($words, array_map('ucfirst', $words), 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.'); 
0
$capitalize_me = array('word1','word2'....'wordn'); 
$capitaliazed = array_map('ucfirst',$capitalize_me); 
$new_sentence = str_replace($capitalize_me,$capitalized,$old_sentence); 

не самый эффективный, но делает работу

0

Это хорошо работает для меня:

<?php 

$word_array = array('ipsum', 'adipisicing'); 
$soucre_sentence = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.'; 

$captilize_words = array(); 
$replacements_captalized = array(); 
$replacements_all_caps = array(); 

foreach ($word_array as $word) { 
    $captilize_words[] = '/\b' . $word . '\b/i'; 
    $replacements_captalized[] = ucfirst(strtolower($word)); 
    $replacements_all_caps[] = strtoupper($word); 
} 

$ret = preg_replace($captilize_words, $replacements_all_caps, $soucre_sentence); 

echo $ret; 

?> 

Добавлено заглавные буквы и все замены CAPS, поскольку я не понимаю, что вы действительно хочу, чтобы ваш результат был. Выбери один!

EDIT: Подлинно не знал о гибкости array_map (что @mmattax) и переработал его в последний раз с этим наконечником.

<?php 

$word_array = array('ipsum', 'adipisicing'); 
$soucre_sentence = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.'; 

$captilize_words = array_map(function ($word) { return '/\b' . $word . '\b/i'; }, $word_array); 
$replacements_captalized = array_map('ucfirst', $word_array); 
$replacements_all_caps = array_map('strtoupper', $word_array); 

$ret = preg_replace($captilize_words, $replacements_all_caps, $soucre_sentence); 

echo $ret; 

?> 
+1

Это немного перебор, может быть сделано в одной строке: str_replace ($ captilize_words, array_map ('ucfirst', $ captilize_words), 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.'); – mmattax

+0

Overkill или нет, этот процесс научил меня «array_map», поэтому спасибо за подсказку @mmattax! – JakeGould

0
$str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.'; 
$caps = 'ipsum|adipisicing'; 
echo preg_replace_callback(
    '/(^|\s)('.$caps.')(\s|$)/' 
    , function($m){ return $m[1].ucfirst($m[2]).$m[3]; } 
    , $str 
); 

Это регулярное выражение, вероятно, может быть лучше (я имею в виду, вы можете использовать \ W), но если вы не учитывают пробелы до/после слова, он заменит в середине слова тоже.

Смежные вопросы