我想在缩写中转换短语,但不希望单词的每个首字母组成缩写,只需要大写的缩写。例如,我想将字符串“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;
答案 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"