regex — вводить первую букву после точки или после точки и пробела

Я хотел бы использовать первую букву после точки или после точки и пробела.

$string="I am a string with several periods.period #1. period #2.";

Это должна быть последняя строка:

I am a string with several periods.Period #1. Period #2.

Я уже искал решение для stackoverflow, но решение, которое я нашел, было только для заглавной буквы начальной буквы после только точки, а не для точки и пробела.

2

Решение

Используйте регулярное выражение, чтобы соответствовать точке \., необязательный пробел \s* и письмо \w,
Затем зациклите массив совпадений и выполните str_replace.

$str="I am a string with several periods.period #1. period #2.";
preg_match_all("/\.\s*\w/", $str, $matches);

foreach($matches[0] as $match){
$str = str_replace($match, strtoupper($match), $str);
}
echo $str;
//I am a string with several periods.Period #1. Period #2.

https://3v4l.org/LevU5

Чтобы сделать его немного более оптимизированным, вы можете добавить array_unique перед циклом, так как str_replace заменяет все равные подстроки.

$matches[0] = array_unique($matches[0]);

https://3v4l.org/mIiX8

1

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

preg_replace_callback твой друг:

$string="I am a string with several periods.period #1. period #2.";
$string = preg_replace_callback('/\.\s*\K\w/',
function($m) {
return strtoupper($m[0]);
},
$string);
echo $string;

Выход:

I am a string with several periods.Period #1. Period #2.
1

Если регулярное выражение не вариант, может работать что-то вроде этого:

$str = "I am a string with several periods.period #1. period #2.";
$strings = explode('.', $str);
$titleCased = [];

foreach($strings as $s){
$titleCased[] = ucfirst(trim($s));
}
echo join(".", $titleCased);

Хотя, это имеет дополнительный эффект удаления пробелов.

https://3v4l.org/fWGUW

0

Я создал эту простую функцию, и она работает как шарм

и вы можете добавлять разделители, как вам нравится.

function capitalize_after_delimiters($string='', $delimiters = array())
{
foreach ($delimiters as $delimiter)
{
$temp = explode($delimiter, $string);
array_walk($temp, function (&$value) { $value = ucfirst($value); });
$string = implode($temp, $delimiter);
}
return $string;
}

$string ="I am a string with several periods.period #1. period #2.";

$result = capitalize_after_delimiters($string, array('.', '. '));

var_dump($result);

result: string(56) "I am a string with several periods.Period #1. Period #2."

результат

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector