1

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

在我的项目中,我必须显示课程的时间表,其中一些课程名称很大,例如“Linguagem de Programação Orientada a Objeto”(面向对象的编程语言),如果我使用我在互联网上找到的代码,它会将“Linguagem de Programação Orientada a 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;
4

5 回答 5

4

IMO,简单地删除所有非大写格式的字符似乎要容易得多。

$str = 'United States of America';
$str = preg_replace('~[^A-Z]~', '', $str);
echo $str; // "USA"
于 2015-04-08T18:17:18.737 回答
4

这是代码。注意正则表达式的变化:

$string = "Progress in Veterinary Science";

$expr = '/(?<=\s|^)[A-Z]/';
preg_match_all($expr, $string, $matches);    
$result = implode('', $matches[0]);
echo $result;
于 2015-04-08T18:06:09.393 回答
1

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

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

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

$expr = '/(?<=\s|^)[A-Z]/';
于 2015-04-08T18:08:31.657 回答
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");
于 2015-04-08T18:16:46.293 回答
1

此正则表达式将查找大写字符,注意已删除i[A-Z]大写。

$expr = '/(?<=\s|^)[A-Z]/';
于 2015-04-08T18:06:02.107 回答