Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обработка пунктцации

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Infinium
Отправлено: 10 Октября, 2012 - 18:07:35
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Господа. Есть некоторый текст. весь в нижнем регистре. Хочу сделать, чтобы после каждого знака "!", "?" и ".", соответсвенно первая буква становилась большой. Вторая часть понятна, а как отловить знаки - не соображу.
 
 Top
Okula
Отправлено: 10 Октября, 2012 - 18:33:39
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Infinium, я так это решил:
PHP:
скопировать код в буфер обмена
  1. $text = 'Привет, чувак! как жизнь твоя?
  2.    думаю что неплохо.ура!!!!';
  3. $text = preg_replace_callback('~(!|\?|\.)(\s*)([a-zа-яё]{1})~isuU', function($match){
  4.         return $match[1].$match[2].mb_strtoupper($match[3], 'utf-8');
  5.     }, $text);
  6.  
  7. var_dump($text);

P.S. для PHP 5.3 и выше.
Результат:
CODE (htmlphp):
скопировать код в буфер обмена
  1. string(101) "Привет, чувак! Как жизнь твоя?
  2.    Думаю что неплохо.Ура!!!!"
 
 Top
AlexAnder
Отправлено: 10 Октября, 2012 - 18:47:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




govnokod пишет:

Спойлер (Отобразить)

вот это да... Огорчение

(Отредактировано автором: 10 Октября, 2012 - 18:51:01)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
Okula
Отправлено: 10 Октября, 2012 - 18:57:14
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




AlexAnder, ты так больше не пугай таким говнокодом Радость
 
 Top
AlexAnder
Отправлено: 10 Октября, 2012 - 18:58:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)





Спойлер (Отобразить)

Okula, плюс в карму за изысканный вариант решения данной задачи Улыбка

(Отредактировано автором: 11 Октября, 2012 - 09:19:18)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
Okula
Отправлено: 10 Октября, 2012 - 19:05:38
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




AlexAnder, ага, вот только если после знака препинания будет не один пробел а больше то работать перестанет Улыбка
К тому же строка должна быть в кодировке windows-1251 или в какой другой однобайтовой кодировке. ;)
 
 Top
Infinium
Отправлено: 10 Октября, 2012 - 20:58:00
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Спасибо! Ушёл учить регулярки Улыбка
 
 Top
Okula
Отправлено: 10 Октября, 2012 - 21:09:52
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Infinium, можно все лишние пробелы и переносы строк заменить на один единственный пробел.
Код будет такой:
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace_callback('~(!|\?|\.)\s*([a-zа-яё]{1})~isuU', function($match){
  2.         return $match[1].' '.mb_strtoupper($match[1], 'utf-8');
  3.     }, $text);
 
 Top
armancho7777777 Супермодератор
Отправлено: 11 Октября, 2012 - 12:57:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $str = '
  3.    Привет, чувак!
  4.    как жизнь твоя?
  5.    думаю что неплохо.ура!!!!
  6. ';
  7.  
  8. echo preg_replace('~([!\?.]+[\s]*.{1})~sue', 'mb_strtoupper("$1", "utf-8")', $str);
  9.  

(Отредактировано автором: 11 Октября, 2012 - 13:00:23)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB