在PHP字符串中大写特定单词

时间:2013-01-26 04:23:55

标签: php

我想取一个字符串,找出具体的词汇并将其大写。因此,对于像“Lorem ipsum dolor sit amet,consectetur adipisicing elit。”这样的字符串,我希望能够只捕获ipsum和adipisicing。所以基本上对某些单词进行大写过滤。

如何做到这一点?

5 个答案:

答案 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.');

答案 1 :(得分:0)

有太多方法可以做到这一点......

答案 2 :(得分:0)

$capitalize_me = array('word1','word2'....'wordn');
$capitaliazed  = array_map('ucfirst',$capitalize_me);
$new_sentence = str_replace($capitalize_me,$capitalized,$old_sentence);

不是最有效的,但是工作

答案 3 :(得分: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替换,因为我不清楚你真正想要的输出是什么。选择一个!

编辑:真的不知道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;

?>

答案 4 :(得分: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),但是如果你没有在单词之前/之后考虑空白,它也会在单词的中间替换。