14

我正在寻找一种方法,可以从输入字段中提取每个单词的第一个字母并将其放入变量中。

示例:如果输入字段是"Stack-Overflow Questions Tags Users",那么变量的输出应该类似于"SOQTU"

4

10 回答 10

22
$s = 'Stack-Overflow Questions Tags Users';
echo preg_replace('/\b(\w)|./', '$1', $s);

与 codaddict 相同,但更短

  • 对于unicode支持,将u修饰符添加到正则表达式:preg_replace('...../u',
于 2010-09-09T16:11:16.597 回答
17

就像是:

$s = 'Stack-Overflow Questions Tags Users';

if(preg_match_all('/\b(\w)/',strtoupper($s),$m)) {
    $v = implode('',$m[1]); // $v is now SOQTU
}

我正在使用正则表达式\b(\w)来匹配单词边界之后的单词字符

编辑:为确保您的所有 Acronym char 都是大写的,您可以使用strtoupper如图所示。

于 2010-09-09T15:00:27.313 回答
6

只是为了完全不同:

$input = 'Stack-Overflow Questions Tags Users';

$acronym = implode('',array_diff_assoc(str_split(ucwords($input)),str_split(strtolower($input))));

echo $acronym;
于 2010-09-09T15:36:10.940 回答
5
$initialism = preg_replace('/\b(\w)\w*\W*/', '\1', $string);
于 2010-09-09T15:02:21.880 回答
4

如果它们仅由空间而不是其他事物分隔。您可以这样做:

function acronym($longname)
{
    $letters=array();
    $words=explode(' ', $longname);
    foreach($words as $word)
    {
        $word = (substr($word, 0, 1));
        array_push($letters, $word);
    }
    $shortname = strtoupper(implode($letters));
    return $shortname;
}
于 2010-09-09T15:00:45.143 回答
3

正则表达式匹配如上面所说的 codaddict 或str_word_count ()1作为第二个参数,它返回一个找到的单词数组。请参阅手册中的示例。然后你可以用任何你喜欢的方式获取每个单词的第一个字母,包括substr($word, 0, 1)

于 2010-09-09T15:02:19.867 回答
2

str_word_count ()函数可能会满足您的需求:

$words = str_word_count ('Stack-Overflow Questions Tags Users', 1);
$result = "";
for ($i = 0; $i < count($words); ++$i)
  $result .= $words[$i][0];
于 2010-09-09T15:04:06.293 回答
2
function initialism($str, $as_space = array('-'))
{
    $str = str_replace($as_space, ' ', trim($str));
    $ret = '';
    foreach (explode(' ', $str) as $word) {
        $ret .= strtoupper($word[0]);
    }
    return $ret;
}

$phrase = 'Stack-Overflow Questions IT Tags Users Meta Example';
echo initialism($phrase);
// SOQITTUME
于 2010-09-09T15:23:40.060 回答
0
$s = "Stack-Overflow Questions IT Tags Users Meta Example";    
$sArr = explode(' ', ucwords(strtolower($s)));
$sAcr = "";
foreach ($sArr as $key) {
   $firstAlphabet = substr($key, 0,1);
   $sAcr = $sAcr.$firstAlphabet ;
}
于 2020-07-24T07:25:15.603 回答
0

使用来自@codaddict的答案。

我还认为,如果您有一个缩写词作为要缩写的词,例如DPR而不是Development Petroleum Resources,因此该词将作为缩写词出现在D上,这没有多大意义。

function AbbrWords($str,$amt){
        $pst = substr($str,0,$amt);
        $length = strlen($str);
        if($length > $amt){
            return $pst;
        }else{
            return $pst;
        }
    }
    
    function AbbrSent($str,$amt){
        if(preg_match_all('/\b(\w)/',strtoupper($str),$m)) {
            $v = implode('',$m[1]); // $v is now SOQTU
            if(strlen($v) < 2){
                if(strlen($str) < 5){
                    return $str;
                }else{
                    return AbbrWords($str,$amt);
                }
            }else{
                return AbbrWords($v,$amt);
            }
        }
    }
于 2021-10-22T12:54:33.390 回答