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 :: mb_preg_match_all и PREG_OFFSET_CAPTURE

 PHP.SU

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


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

> Без описания
Telnet
Отправлено: 09 Марта, 2013 - 12:03:52
Post Id


Частый гость


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


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




нужно как то реализовать подсчет символов в строке в UTF - 8
PHP:
скопировать код в буфер обмена
  1.  
  2. function mb_preg_match_all($ps_pattern, $ps_subject, &$pa_matches, $pn_flags = PREG_PATTERN_ORDER, $pn_offset = 0, $ps_encoding = NULL) {
  3.                // WARNING! - All this function does is to correct offsets, nothing else:
  4.                //
  5.                if (is_null($ps_encoding))
  6.                  $ps_encoding = mb_internal_encoding();
  7.  
  8.                $pn_offset = strlen(mb_substr($ps_subject, 0, $pn_offset, $ps_encoding));
  9.                $ret = preg_match_all($ps_pattern, $ps_subject, $pa_matches, $pn_flags, $pn_offset);
  10.  
  11.                if ($ret && ($pn_flags & PREG_OFFSET_CAPTURE))
  12.                  foreach($pa_matches as &$ha_match)
  13.                    foreach($ha_match as &$ha_match)
  14.                      $ha_match[1] = mb_strlen(substr($ps_subject, 0, $ha_match[1]), $ps_encoding);
  15.                  //
  16.                  // (code is independent of PREG_PATTER_ORDER / PREG_SET_ORDER)
  17.  
  18.                return $ret;
  19.          }      
  20.  


пытаюсь использовать ее как и обычную preg_match_all, но она возвращает всегда 0
 
 Top
DeepVarvar Супермодератор
Отправлено: 09 Марта, 2013 - 12:45:20
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




 
 Top
Telnet
Отправлено: 09 Марта, 2013 - 14:55:33
Post Id


Частый гость


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


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




Так как мне нужно было найти только позиции всех одинаковых символов
я сделал так
PHP:
скопировать код в буфер обмена
  1.  
  2.                  $letterCount = mb_substr_count($solvo, $letter, 'UTF-8');
  3.                  if($letterCount){
  4.                      for($i=0;$letterCount>$i;$i++){                      
  5.                          $letterPos = mb_stripos(solvo,$letter,($letterPos+1), 'UTF-8');
  6.                          $pos[] = $letterPos;
  7.                      }
  8.                  }
  9.  

и все потом массиве $pos получаю желаемый массив с точными позициями
Всем спасибо за помощь
 
 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