我正在寻找一种方法,可以从输入字段中提取每个单词的第一个字母并将其放入变量中。
示例:如果输入字段是"Stack-Overflow Questions Tags Users"
,那么变量的输出应该类似于"SOQTU"
$s = 'Stack-Overflow Questions Tags Users';
echo preg_replace('/\b(\w)|./', '$1', $s);
与 codaddict 相同,但更短
u
修饰符添加到正则表达式:preg_replace('...../u',
就像是:
$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
如图所示。
只是为了完全不同:
$input = 'Stack-Overflow Questions Tags Users';
$acronym = implode('',array_diff_assoc(str_split(ucwords($input)),str_split(strtolower($input))));
echo $acronym;
$initialism = preg_replace('/\b(\w)\w*\W*/', '\1', $string);
如果它们仅由空间而不是其他事物分隔。您可以这样做:
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;
}
正则表达式匹配如上面所说的 codaddict 或str_word_count ()1
作为第二个参数,它返回一个找到的单词数组。请参阅手册中的示例。然后你可以用任何你喜欢的方式获取每个单词的第一个字母,包括substr($word, 0, 1)
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];
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
$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 ;
}
使用来自@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);
}
}
}