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 :: Как это работает (\b и utf-8 )

 PHP.SU

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


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

> Без описания
duhon
Отправлено: 10 Апреля, 2014 - 18:20:28
Post Id



Гость


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


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




\b это позиция до и после \w, но почему-то работает странно. Выражу это скриптом

PHP:
скопировать код в буфер обмена
  1. function u_r($str){return iconv('UTF-8', 'cp1251', $str);}
  2. function r_u($str){return iconv('cp1251', 'utf-8', $str);}
  3. $str = 'and рублей';
  4. echo 'locale: ' . setlocale(LC_ALL, 0) . PHP_EOL;
  5. echo preg_replace('/(*UCP)\b/', '<$0>', $str).PHP_EOL;
  6. echo preg_replace('/(*UTF8)\b/', '<$0>', $str).PHP_EOL;
  7. echo preg_replace('/\b/u', '<$0>', $str).PHP_EOL;
  8. echo preg_replace('/\b/', '<$0>', $str).PHP_EOL;
  9. echo preg_replace('/\w/u', '<$0>', $str).PHP_EOL;
  10. setlocale(LC_ALL, 'ru_RU.UTF-8');
  11. echo 'locale: ' . setlocale(LC_ALL, 0) . PHP_EOL;
  12. echo preg_replace('/(*UCP)\b/', '<$0>', $str).PHP_EOL;
  13. echo preg_replace('/(*UTF8)\b/', '<$0>', $str).PHP_EOL;
  14. echo preg_replace('/\b/u', '<$0>', $str).PHP_EOL;
  15. echo preg_replace('/\b/', '<$0>', $str).PHP_EOL;
  16. echo preg_replace('/\w/u', '<$0>', $str).PHP_EOL;
  17. setlocale(LC_ALL, 'C');
  18. echo 'locale: ' . setlocale(LC_ALL, 0) . PHP_EOL;
  19. echo preg_replace('/(*UCP)\b/', '<$0>', $str).PHP_EOL;
  20. echo preg_replace('/(*UTF8)\b/', '<$0>', $str).PHP_EOL;
  21. echo preg_replace('/\b/u', '<$0>', $str).PHP_EOL;
  22. echo preg_replace('/\b/', '<$0>', $str).PHP_EOL;
  23. echo preg_replace('/\w/u', '<$0>', $str).PHP_EOL;
  24. setlocale(LC_ALL, 'ru_RU.CP1251');
  25. echo 'locale: ' . setlocale(LC_ALL, 0) . PHP_EOL;
  26. echo preg_replace('/(*UCP)\b/', '<$0>', $str).PHP_EOL;
  27. echo preg_replace('/(*UTF8)\b/', '<$0>', $str).PHP_EOL;
  28. echo preg_replace('/\b/u', '<$0>', $str).PHP_EOL;
  29. echo preg_replace('/\b/', '<$0>', $str).PHP_EOL;
  30. echo preg_replace('/\w/u', '<$0>', $str).PHP_EOL;
  31. setlocale(LC_ALL, 'ru_RU.UTF-8');
  32. echo 'locale: ' . setlocale(LC_ALL, 0) . PHP_EOL;
  33. $cp_rus = iconv('UTF-8', 'cp1251', $str);
  34. echo r_u(preg_replace('/(*UCP)\b/', '<$0>', $cp_rus)).PHP_EOL;
  35. echo r_u(preg_replace('/(*UTF8)\b/', '<$0>', $cp_rus)).PHP_EOL;
  36. echo r_u(preg_replace('/\b/u', '<$0>', $cp_rus)).PHP_EOL;
  37. echo r_u(preg_replace('/\b/', '<$0>', $cp_rus)).PHP_EOL;
  38. echo r_u(preg_replace('/\w/', '<$0>', $cp_rus)).PHP_EOL;


результат
CODE (htmlphp):
скопировать код в буфер обмена
  1. locale: LC_CTYPE=ru_RU.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
  2. <>and<> <>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>ей<>
  3. <>and<> рублей
  4. <>and<> <>&#65533;<>&#65533;ублей<>
  5. <>and<> рублей
  6. <a><n><d> <р><у><б><л><е><й>
  7. locale: ru_RU.UTF-8
  8. <>and<> <>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>ей<>
  9. <>and<> рублей
  10. <>and<> <>&#65533;<>&#65533;ублей<>
  11. <>and<> рублей
  12. <a><n><d> <р><у><б><л><е><й>
  13. locale: C
  14. <>and<> <>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>ей<>
  15. <>and<> рублей
  16. <>and<> <>&#65533;<>&#65533;ублей<>
  17. <>and<> рублей
  18. <a><n><d> <р><у><б><л><е><й>
  19. locale: C
  20. <>and<> <>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>&#65533;<>ей<>
  21. <>and<> рублей
  22. <>and<> <>&#65533;<>&#65533;ублей<>
  23. <>and<> рублей
  24. <a><n><d> <р><у><б><л><е><й>
  25. locale: ru_RU.UTF-8
  26. <>and<> <>рублей<>
  27.  
  28.  
  29. <>and<> рублей
  30. <a><n><d> рублей



Кто обьяснит
 
 Top
IllusionMH
Отправлено: 10 Апреля, 2014 - 18:31:53
Post Id



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


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


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




duhon, \b ожидаемо работает только для диапазона символов 0-127. В остальных случаях(особенно с юникодом) она неприменима.
Вдогонку http://stackoverflow[dot]com/a/5900891

(Отредактировано автором: 10 Апреля, 2014 - 18:33:49)

 
 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