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]   

> Без описания
LShark
Отправлено: 21 Мая, 2013 - 21:14:49
Post Id



Частый гость


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


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




Есть сообщения - состоящие из русских букв и латинских.

Подскажите алгоритм - как подсчитать сколько в сообщении кириллицы, а сколько латинских(английских) букв?

Условно:
вход:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Вася Пупкин This is not Петр Here.

выход:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Кириллица: 14 букв, Латиница - 13.


-----
Истина прежде всего в том, что...
 
 Top
DelphinPRO
Отправлено: 21 Мая, 2013 - 21:31:00
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. $s = 'Вася Пупкин This is not Петр Here.';
  2.  
  3. preg_match_all('/[a-z]/i', $s, $m);
  4. preg_match_all('/[а-яА-ЯёЁ]/u', $s, $m2);
  5. echo 'Кириллица: '.count($m[0]).' букв, Латиница - '.count($m2[0]).'.';


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
vanicon
Отправлено: 21 Мая, 2013 - 21:31:14
Post Id



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


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


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




На ум первым приходит только перебор текста циклом, и в нем проверять латиница или нет, но скорее всего можно проще сделать стандартными функциями пыха, не знаю


-----
Так было, так есть и так будет
 
 Top
LShark
Отправлено: 21 Мая, 2013 - 21:32:21
Post Id



Частый гость


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


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




Я до такого додумался

Цитата:
$a="Вася Пупкин This is not Петр Here.";

$b=preg_replace('/[А-Яа-яЁё]/',"",$a);
$c=preg_replace('/[A-Za-z]/',"",$a);

echo (mb_strlen($a)-mb_strlen($b));
echo (mb_strlen($a)-mb_strlen($c));


-----
Истина прежде всего в том, что...
 
 Top
vanicon
Отправлено: 21 Мая, 2013 - 21:32:25
Post Id



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


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


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




О регулярка, вариант, что то об этом не подумал сразу...


-----
Так было, так есть и так будет
 
 Top
LShark
Отправлено: 21 Мая, 2013 - 21:33:06
Post Id



Частый гость


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


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




Точно, забыл про второй аргумент прегматчол
(Добавление)
Остается вопрос - что "ресурсоэкономнее" - прегматчолл с сохранением замен (для второго аргумента) или прогон прег-реплэйса с последующим подсчетом длины?


-----
Истина прежде всего в том, что...
 
 Top
DelphinPRO
Отправлено: 21 Мая, 2013 - 21:39:16
Post Id



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


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


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




на маленьких текстах - можно не заморачиваться Улыбка
(Добавление)
ваш вариант с заменой можно слегка украсить

PHP:
скопировать код в буфер обмена
  1. $a="Вася Пупкин This is not Петр Here.";
  2.  
  3. $kir = preg_replace('/[^А-Яа-яЁё]/', '', $a);
  4. $lat = preg_replace('/[^a-z]/i', '', $a);
  5.  
  6. echo mb_strlen($kir);
  7. echo mb_strlen($lat);


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LShark
Отправлено: 21 Мая, 2013 - 21:42:14
Post Id



Частый гость


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


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




Согласен, но там могут быть тексты и по 20-40 кб.


-----
Истина прежде всего в том, что...
 
 Top
DelphinPRO
Отправлено: 21 Мая, 2013 - 21:45:43
Post Id



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


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


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




не думаю, что разница будет заметна.
но вы можете провести замеры потребления памяти memory_get_usage


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LShark
Отправлено: 21 Мая, 2013 - 21:50:44
Post Id



Частый гость


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


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




LShark пишет:
ваш вариант с заменой можно слегка украсить


Гениально! Нафига считать разницу, если можно реально удалить все, кроме... Думаю, этот вариант и оставлю.


-----
Истина прежде всего в том, что...
 
 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