0

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

如何才能做到这一点?

4

5 回答 5

4

不要为此使用正则表达式,这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.');
于 2013-01-26T04:30:26.283 回答
0

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

于 2013-01-26T04:29:19.903 回答
0
$capitalize_me = array('word1','word2'....'wordn');
$capitaliazed  = array_map('ucfirst',$capitalize_me);
$new_sentence = str_replace($capitalize_me,$capitalized,$old_sentence);

不是最有效的,但确实有效

于 2013-01-26T04:30:29.390 回答
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;

?>

添加大写和全部大写替换,因为我不清楚您真正希望输出是什么。选一个!

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

?>
于 2013-01-26T04:35:09.497 回答
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),但如果你不考虑单词之前/之后的空格,它也会在单词中间替换。

于 2013-01-26T04:36:30.417 回答