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
Форумы портала PHP.SU :: Версия для печати :: mb_preg_match_all и PREG_OFFSET_CAPTURE
Форумы портала PHP.SU » » Кодировки и все смежное » mb_preg_match_all и PREG_OFFSET_CAPTURE

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

1. Telnet - 09 Марта, 2013 - 12:03:52 - перейти к сообщению
нужно как то реализовать подсчет символов в строке в 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
2. DeepVarvar - 09 Марта, 2013 - 12:45:20 - перейти к сообщению
3. Telnet - 09 Марта, 2013 - 14:55:33 - перейти к сообщению
Так как мне нужно было найти только позиции всех одинаковых символов
я сделал так
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 получаю желаемый массив с точными позициями
Всем спасибо за помощь

 

Powered by ExBB FM 1.0 RC1