我想取一个字符串,找出具体的词汇并将其大写。因此,对于像“Lorem ipsum dolor sit amet,consectetur adipisicing elit。”这样的字符串,我希望能够只捕获ipsum和adipisicing。所以基本上对某些单词进行大写过滤。
如何做到这一点?
答案 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)
有太多方法可以做到这一点......
str_replace
进行迭代,然后将explode数组重新转换为字符串答案 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),但是如果你没有在单词之前/之后考虑空白,它也会在单词的中间替换。