Я хочу преобразовать фразы в аббревиатуры, но не хочу, чтобы каждая первая буква слов составляла аббревиатуру, только те, которые в верхнем регистре. Например, я хотел бы преобразовать строку «Соединенные Штаты Америки» в «США», а не в «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;
Вот код Обратите внимание на изменения в регулярном выражении:
$string = "Progress in Veterinary Science";
$expr = '/(?<=\s|^)[A-Z]/';
preg_match_all($expr, $string, $matches);
$result = implode('', $matches[0]);
echo $result;
Это регулярное выражение будет искать заглавные буквы, обратите внимание на удаленные i
а также [A-Z]
в верхнем регистре.
$expr = '/(?<=\s|^)[A-Z]/';
Прежде всего, вы должны действительно попытаться понять регулярные выражения.
Тот, который вы используете, чтобы получить первую букву каждого слова, имеет модификатор в конце ( i
символ после последней косой черты), что делает регистр нечувствительным к регистру.
В вашем случае вам нужны только заглавные буквы, поэтому вы должны удалить i
модификатор, и измените нужные буквы ( [a-z]
часть) в верхний регистр ([A-Z]
). Таким образом, регулярное выражение становится:
$expr = '/(?<=\s|^)[A-Z]/';
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");
ИМО, кажется, намного проще просто удалить все символы, которые не в верхнем регистре.
$str = 'United States of America';
$str = preg_replace('~[^A-Z]~', '', $str);
echo $str; // "USA"