如何只获得PHP中的大写首字母?

时间:2015-04-08 18:00:31

标签: php regex preg-match-all abbreviation

我想在缩写中转换短语,但不希望单词的每个首字母组成缩写,只需要大写的缩写。例如,我想将字符串“United States of America”转换为“USA”而不是“USOA”,因为我找到的所有代码都有效。

在我的项目中,我必须显示类的时间表,并且一些类名称很像“LinguagemdeProgramaçãoOrientadaa Objeto”(面向对象的编程语言),如果我使用我在上面找到的代码互联网,它会把“LinguagemdeProgramaçãoOrientadaa Objeto”字符串变成LDPOAO,而不是LPOO,因为它是有意义的。

我找到的代码:(它将字符串转换为缩写,我想知道如何只选择大写字母放入$ result)

$string = "Progress in Veterinary Science";

$expr = '/(?<=\s|^)[a-z]/i';
preg_match_all($expr, $string, $matches);

$result = implode('', $matches[0]);

$result = strtoupper($result);

echo $result;

5 个答案:

答案 0 :(得分:5)

这是代码。请注意对正则表达式的更改:

$string = "Progress in Veterinary Science";

$expr = '/(?<=\s|^)[A-Z]/';
preg_match_all($expr, $string, $matches);    
$result = implode('', $matches[0]);
echo $result;

答案 1 :(得分:1)

此正则表达式将查找大写字符,请将已移除的i[A-Z]视为大写。

$expr = '/(?<=\s|^)[A-Z]/';

答案 2 :(得分:1)

首先,你应该真正尝试理解正则表达式。

你用来获取每个单词的第一个字母的那个在结尾处有一个修饰符(最终斜杠之后的i个字符),这使得正则表达式不区分大小写。

在您的情况下,您只需要大写字母,因此您应该删除i修饰符,并将所需的字母([a-z]部分)更改为大写([A-Z])。所以正则表达式变成了:

$expr = '/(?<=\s|^)[A-Z]/';

答案 3 :(得分:1)

 function abbreviate ($string) {
    $in = explode(" ", $string);
    $abbr = '';
    foreach ($in AS $key => $input) {
        preg_match("/^([A-Z]+)/", $input, $matches);
        $abbr = (isset($matches[0])) ? $abbr.$matches[0] : $abbr;
    }
    return $abbr;
}

echo abbreviate("United States of America");

答案 4 :(得分:1)

IMO,简单地删除所有不是大写格式的字符似乎更容易。

$str = 'United States of America';
$str = preg_replace('~[^A-Z]~', '', $str);
echo $str; // "USA"