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

palarmaz
На сайте с 05.04.2010
Offline
125
1071

Перерыл столько сайтов, не нашел решения. Нужна регулярка, кажется на Perl. Есть текст:

Наполненные Свиные отбивные с Польской колбасой и Квашеной капустой. Далее идет Текст и другое.

Нужно перевести первую букву слова в нижний регистр. Но перед точкой не трогать.

Регулярка примерно такого вида. (\s)([а-я]{1})[.] - удаляет одну букву за которой точка.

\s(?-i)[a-z]+\s - удаляет все слова которые начинаются с пробела и начинаются с маленькой буквы.

Тестирую регилярки здесь http://www.gskinner.com/RegExr/

Как понимаю нужно начинать поиск с пробела \s.

Hartamon
На сайте с 04.07.2006
Offline
94
#1

В php есть замечательная функция strtolower

Hartamon добавил 20.01.2011 в 13:47


$str="Наполненные Свиные отбивные с Польской колбасой и Квашеной капустой";
$str_new = ucfirst(strtolower($str));
palarmaz
На сайте с 05.04.2010
Offline
125
#2

Ну php не очень годится. Тем более мне кажется что функция изменит регистр перед точкой. А это не правильно.

Hartamon
На сайте с 04.07.2006
Offline
94
#3
palarmaz:
Тем более мне кажется что функция изменит регистр перед точкой. А это не правильно.

Тогда так:


$str="Наполненные Свиные отбивные с Польской колбасой и Квашеной капустой. Наполненные Свиные отбивные с Польской колбасой и Квашеной капустой. Наполненные Свиные отбивные с Польской колбасой и Квашеной капустой. Наполненные Свиные отбивные с Польской колбасой и Квашеной капустой.";
$arr=explode(". ", $str);
foreach ($arr as $item)
{
$arr_new[$i] = ucfirst(strtolower($item));
$i++;
}
$str_new=implode(". ", $arr_new);

Ну php не очень годится

Ну тогда хз...

E
На сайте с 03.12.2010
Offline
140
#4

strtolower действительно изменит везде. можно да в цикле, вам же единоразово это сделать надо ?

palarmaz
На сайте с 05.04.2010
Offline
125
#5
eBasher:
strtolower действительно изменит везде. можно да в цикле, вам же единоразово это сделать надо ?

ДА нет, текста море.

gormarket
На сайте с 29.12.2010
Offline
47
#6

ищем

(любой_символ_не_точка+пробельный_символ)(ОДНА_БУКВА_В ВЕРХНЕМ_РЕГИСТРЕ)(любой_символ_не_точка)

и заменяем на то же самое, но с переводом буквы в нижний регистр функцией strtolower(), для чего добавляем в выражение модификатор "e", что заставляет интерпретатор рассматривать строку замены как PHP-код.


$text = 'Наполненные Свиные отбивные с Польской Колбасой И Квашеной капустой. Далее идет Текст от И.И. Иванова и другое.';
$text = preg_replace("/([^.]\s)([А-Я])([^.])/e","'\\1'.strtolower('\\2').'\\3'",$text);

В результате получаем в $text:


Наполненные свиные отбивные с польской колбасой и Квашеной капустой. Далее идет текст от И.И. Иванова и другое.
Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
palarmaz
На сайте с 05.04.2010
Offline
125
#7

gormarket, спасибо за подсказку, буду дорабатывать в моем случае.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий