Как получить только заглавные первые буквы в PHP?

Я хочу преобразовать фразы в аббревиатуры, но не хочу, чтобы каждая первая буква слов составляла аббревиатуру, только те, которые в верхнем регистре. Например, я хотел бы преобразовать строку «Соединенные Штаты Америки» в «США», а не в «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;

1

Решение

Вот код Обратите внимание на изменения в регулярном выражении:

$string = "Progress in Veterinary Science";

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

Другие решения

Это регулярное выражение будет искать заглавные буквы, обратите внимание на удаленные i а также [A-Z] в верхнем регистре.

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

Прежде всего, вы должны действительно попытаться понять регулярные выражения.

Тот, который вы используете, чтобы получить первую букву каждого слова, имеет модификатор в конце ( i символ после последней косой черты), что делает регистр нечувствительным к регистру.

В вашем случае вам нужны только заглавные буквы, поэтому вы должны удалить i модификатор, и измените нужные буквы ( [a-z] часть) в верхний регистр ([A-Z]). Таким образом, регулярное выражение становится:

$expr = '/(?<=\s|^)[A-Z]/';
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");
1

ИМО, кажется, намного проще просто удалить все символы, которые не в верхнем регистре.

$str = 'United States of America';
$str = preg_replace('~[^A-Z]~', '', $str);
echo $str; // "USA"
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector