【问题标题】:Captilizing particular words in PHP string捕获 PHP 字符串中的特定单词
【发布时间】:2013-01-26 04:23:55
【问题描述】:

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

如何做到这一点?

【问题讨论】:

标签: php


【解决方案1】:

不要为此使用正则表达式,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.');

【讨论】:

    【解决方案2】:
    $capitalize_me = array('word1','word2'....'wordn');
    $capitalized  = array_map('ucfirst',$capitalize_me);
    $new_sentence = str_replace($capitalize_me,$capitalized,$old_sentence);
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        $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),但如果你不考虑单词前后的空格,它也会在单词中间替换。

        【讨论】:

          【解决方案5】:

          这对我很有效:

          <?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;
          
          ?>
          

          【讨论】:

          • 这有点矫枉过正,可以在一行中完成:str_replace($captilize_words, array_map('ucfirst', $captilize_words), 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.');
          • 矫枉过正与否,这个过程教会了我关于array_map的知识,所以感谢@mmattax的提示!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-20
          • 1970-01-01
          • 2020-11-18
          • 1970-01-01
          • 2019-05-17
          • 1970-01-01
          相关资源
          最近更新 更多