Сегодня
22 ноября 2024
19:13
Вход Sign In Регистрация Sign Up Забыли пароль ? Forgot password ?
VARVE - Пишем слайдер на javascript с нуля
Пишем слайдер на javascript с нуля Доброго Вам времени суток, странник интернета !!! Я давно хотел рассказать о том, как можно создать свой слайдер используя javascript - технологию. Вы скажете - слайдеров уже готовых в интернете - МОРЕ. Согласен с Вами. Но все они написаны чужой рукой, а значит знания о том, как они пис
подробнее...

Теги

сайты, игры, дизайн, продвижение, php, html, css, my sql, c++, delphi, photoshop, 3ds max, fl studio, трекерская музыка, уроки

Статьи сайта

Тестирование подключения к платежной системе с использованием скрипта эмулятора

Модуль для регистрации пользователя на сайте

Код для модуля регистрации пользователя на сайте

Быстрый подсчёт ключевых слов в статье

Модуль подсчёта ключевых слов в статье

Онлайн-сервис для подсчёта статистики ключевых слов

Пишем слайдер на javascript с нуля

Логика работы слайдера на javascript

Пишем свою соц. сеть - модуль предложений для webjob

Пишем свою соц. сеть - модуль предложений для webjob - часть реализации для личного кабинета

Пишем свою соц. сеть - Реализация файлового хранилища предложений в csv-файле

Тестирование подключения к платежной системе ЕДИНЫЙ КОШЕЛЕК (w1.ru) с использованием скрипта эмулятора

Пишем свою cms - шаг 1

Пишем свою cms - шаг 2

Пишем свою cms - шаг 3

бесплатная флеш игра freeway fury 2 - разработчик Serius Games

бесплатные флеш игры сторонних разработчиков

Как я осваивал Flash

Список уроков на тему создания flash приложений и игр

Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр

проект портала Идеи Комфорта

игра Веселый Буквоежка

игра Веселый Буквоежка

Использование cron, crontab и планировщика задач

Совместное использование jquery и mootools или других js-фреймворков

Модуль content php performer для megainformatic cms

Пишем компактный слайдер

Что нужно знать для создания сайта ?

Что нужно знать для создания сайта ? Глава 2 - Кодировки и DOCTYPE

Что нужно знать для создания сайта ? Глава 3 - Идём дальше - нанизываем новый код - где объявляются стили css и код javascript

Что нужно знать для создания сайта ? Содержание

Что нужно знать для создания сайта ? css - стили

preg_match или Использование регулярных выражений в php

статьи Тимонина Андрея - Flash. Содержание

статья Тимонина Андрея - Flash. Подготовка к работе.

статья Тимонина Андрея - Flash. Hello world.

статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

Тимонин Андрей - Несколько слов о себе

статьи Тимонина Андрея - уроки из области веб программирования, создания казуальных игр

статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

статья Тимонина Андрея - Хронология работы программы. Создаем Лог

статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

статья Тимонина Андрея - States. Создаем менеджер состояний игры.

статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

статья Тимонина Андрея - Таймер. Выводим время игры.

статья Тимонина Андрея - DirectX9. Создаем основной класс обработки графики.

статья Тимонина Андрея - DirectX9. Создаем первое приложение.

Что нужно знать для создания сайта ? float - использование в css - стилях

Уроки Fruity Loops Studio (FL Studio) - урок 2 - пишем свою композицию COLD

Уроки Fruity Loops Studio (FL Studio) - урок 3 - экспериментируем с композицией COLD

Что нужно знать для создания сайта ? Стандартные шрифты для сайта

Что нужно знать для создания сайта ? ASC II Коды символов

Уроки Fruity Loops Studio (FL Studio) - урок 4 - пишем первый вариант композиции COLD

Популяризация Современных Научных Знаний и Размышления на околонаучные темы. СОДЕРЖАНИЕ

Популяризация Современных Научных Знаний и Размышления на околонаучные темы. Энергетический кокон

Модуль галерей для любой cms

Уроки Photoshop - Быстрый старт

Мои Музыкальные Миры - страница 2

megainformatic cms rs

Мега Информатик - Примеры моих работ

Мега Информатик - Портфолио выполненных проектов сайтов и приложений

Уроки Photoshop - Текстуры

Уроки Photoshop - Создаем текстуру горной породы

Уроки Photoshop - Создание вариантов на тему созданной текстуры

Уроки Photoshop - Рисование текстуры травы

Уроки css - атрибут position

Уроки Photoshop - Рисование текстуры песка

Уроки Photoshop - Подготовка набора текстур

Уроки Photoshop - Рисование текстур глина, грязь

Новогодняя дискотека 2013 на megainformatic точка ru

Программируем на C++ с использованием MFC

Программируем на C++ с использованием MFC - Создание MFC приложения

Программируем на C++ с использованием MFC - Создание MFC приложения - hello, world !

Как создать игру ? - Пишем игровой движок с нуля

Как создать игру ? - Пишем игровой движок с нуля - Вступление

Как создать игру ? - Пишем игровой движок с нуля - Общая структура будущего игрового движка

Разное

Как создать игру ? - Пишем игровой движок с нуля - DXUTMainLoop - цикл работы DirectX-приложения

Варианты макетов Психолог 911

Шаблоны для сайтов - что это и какие они бывают ?

Уроки Photoshop - текстуры

Мои Музыкальные Миры - готовая музыка mp3 - новинки 2013 года

Уроки Photoshop - Огонь, создание огня

Уроки Photoshop - Создание растительных текстур и объектов

Fruity Loops Studio 9 - Как синтезировать свои сэмплы - изучаем возможности плагина Sytrus

Видоизменяем тему для Wordpress под свои нужды

Уроки Photoshop - Продолжаем создавать основные типы текстур - металл

Уроки Photoshop - Остановимся на создании элементно-упорядоченных текстур на примере создания чешуевидной текстуры

Уроки Photoshop - Займемся рисованием небесных текстур - небо и облака

Человеко-понятный УРЛ - рассматриваем достоинства и недостатки

Все уроки Photoshop на varve точка ru

Из жизни известных программистов - юмор

Dr Web проверка сайта на вирусы

Основы верстки

Что нужно знать для создания антивируса ?

С Днём Святого Валентина

С Днём рождения !

Мои Музыкальные Миры - готовая музыка mp3 - новинки 2013 года - музыка и звуки для игры Brain Storm / Мозговая Атака

С Праздником 8 Марта Вас Дорогие женщины !!!

Разное - 8 марта 2013 - Шашлыки :))))

Программирование на языке ассемблера - Урок 2 - первая полезная программа - выполнение арифметических вычислений - сложения, вычитания, умножения и деления

Программирование на языке ассемблера - содержание

Мои Музыкальные Миры - готовая музыка mp3 - новинки 2013 года - музыка и звуки для игры Zomby Brain Burger

Создание сайта бесплатно или под заказ

zbb

Программирование на языке ассемблера - Урок 3 - первая полезная программа - выполнение арифметических вычислений - сложения, вычитания, умножения и деления - разбираем логические ошибки

Мои Музыкальные Миры - готовая музыка mp3 - новинки 2013 года - альбом Бесконечное Движение

Уроки Photoshop - Создание тканеподобных текстур

Уроки Photoshop - Раскраска

Уроки Photoshop - Варианты раскраски

Как создать flash баннер ?

Модуль отзывов/комментариев для вашего сайта

Модуль короткие ссылки short link

Приключения Кости Коробкина - Как я провел лето - интерактивный комикс

Использование регулярных выражений в php

[к содержанию]

Здравствуйте ! Сегодня мы займёмся изучением regexp - регулярных выражений в языке php. Вашему вниманию предлагается статья Артемьева Сергея, которую я нашел на сайте -

по материалам статьи: http://on-line-teaching.com/php/regexp.htm

автор: Артемьев С. И.

В статье мною были исправлены некоторые неточности и синтаксические ошибки, а также вставлены блоки кода, приведенные в примерах, сразу же возвращающие результат его выполнения на php. Блоки кода php внедрены при помощи модуля content php performer полный исходный код которого и объяснение Вы также найдёте тут

Далее по тексту -

Одна из очень мощных и полезных возможностей языка PHP - поддержка регулярных выражений. Многих программистов, как начинающих, так и довольно опытных, пугает внешняя сложность и запутанность языка регулярных выражений. Но могу вас уверить - это того стоит. Применение регулярных выражений существенно облегчает работу по обработке текстов и слабо структурированных данных.


Регулярные выражения - это выражения, написанные на специальном языке. Не пугайтесь, язык достаточно прост для понимания, необходимы лишь опыт и практика.


Я думаю, вы неоднократно сталкивались с ситуациями, когда у вас есть текст (например, в Microsoft Word) и вам надо найти в нём что-то важное. Если вы знаете, что именно ищете - всё просто: вызвали диалог поиска, ввели искомое слово, нажали кнопку и вуаля - текст найден.


Но что вы будете делать, если вы заранее знаете только тип искомой информации? Например, перед вами стоит задача найти все адреса электронной почты в документе на пару сотен листов. Некоторые будут просматривать документ вручную, некоторые - введут в поиске собаку (@) и будут искать её. Согласитесь - оба вариата это каторжный неблагодарный труд.

Вот тут-то на выручку приходят регулярные выражения. В некотором приближении регулярные выражения можно сравнить с масками или шаблонами, которые накладываются на текст: если текст соответствует маске - значит это искомый фрагмент. Но перед тем как рассматривать применение регулярных выражений, мы познакомимся с их синтаксисом.

Регулярное выражение - это текстовая строка, составленная по определённым законам и правилам. Строка состоит из символов и групп символов, метасимволов, квантификаторов и модификаторов.

Под символами в данном случае понимаются любые символы любого алфавита. Причем не только читаемые. Вы вполне можете вставить в выражение нечитаемый символ, для этого вам надо будет всего-лишь знать его код в шестнадцатиричном виде. Например:

// читаемые символы
a
Е
// нечитаемые символы и коды
\x41 - то же что буква 'A'
\x09 - символ табуляции

Группа символов - это несколько символов, записанные последовательно:

абвг
ACZms

Сразу обращаю ваше внимание - "пробел" в регулярных выражения тоже рассматривается как значимый символ, поэтому при написании выражений будьте внимательны. Например, эти группы символов являются РАЗНЫМИ выражениями:

АБВГДЕ
АБВ ГДЕ

Следующий элемени языка - метасимволы. Приставка "мета" означает, что эти символы описывают некие другие символы или их группы. В таблице рассмотрены основные метасимволы языка регулярных выражений:

Метасимволы для задания специальных символов
() Скобки. Определяют вложенные выражения.
| Метасимвол выбора
^ Метасимвол начала строки
$ Метасимвол конца строки
\n Символ перевода строки (шестнадцатеричный код 0x0A)
\r Символ возврата каретки (шестнадцатеричный код 0x0D)
\t Символ табуляции (шестнадцатеричный код 0x09)
\xhh Вставка символа с шестнадцатиричным кодом 0xhh, например \x42 вставит латинскую букву 'B'
Метасимволы для задания групп символов
. Точка. Любой символ.
\d Цифра (0-9)
\D Не цифра (любой символ кроме символов 0-9)
\s Пустой символ (обычно пробел и символ табуляции)
\S Непустой символ (все, кроме символов, определяемых метасимволом \s)
\w "Словарный" символ (символ, который используется в словах. Обычно все буквы, все цифры и знак подчеркивания ('_'))
\W Все, кроме символов, определяемых метасимволом \w

Метасимволы из второй половины таблицы очень легко запомнить. "d" - digit (цифра), "s" - symbol (символ), "w" - word (слово). Если буква большая - значит надо добавить "НЕ" в описанию группы.

Возьмём для примера текст "На красной майке цифры 1812, а на зелёной майке - 2009". Рассмотрим примеры простейших регулярных выражений:

\d\d\d\d - найдёт 1812 и 2009
\D - найдёт все буквы, пробелы и знаки препинания
\s - найдёт все пробелы в тексте.

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

[0-9] - означает любую цифру (то же, что \d)
[0,2,4,6,8] - означает чётную цифру
[A-Za-z0-9] - обозначает любой символ латниского алфавита (в любом регистре) или цифру.

Например, выражение \d\d\d[0,2,4,6,8] в тестовой строке найдёт только 1812, но не 2009. Это выражение следует читать как "найти все последовательности из четырёх цифр, где последняя цифра равна 0,2,4,6 или 8".

Нам осталось упомянуть лишь квантификаторы и модификаторы.

Квантификатор - это специальная конструкция, определяющая, сколько раз должен встретиться символ или группа символов. Квантификатор записывается в фигурных скобках "{}". Возможны два формата записи: точный и диапазонный. Точный формат записывается так:

{X}

Здесь Х - это количество раз, которое должен повториться предшествующий символ или группа. Например выражение

\d{4}

следует читать как "ровно четыре последовательно записанные цифры".

Вторая форма записи - диапазонная. Записывается как

{X, Y}
// или
{,Y}
// или
{X,}

где X - минимальное, а Y - максимальное количество повторений. Например:

\d{2,4}

читается как "от двух до четырёх последовательно записанных цифр". Если одна из границ не указана, то подразумевается отсутствие ограничения. Например:

\w{3,}  - три и более букв.
\d{,5}  - цифр нет вообще, либо есть, но не более пяти.

Квантификаторы могут применяться как к одному символу, так и к группе:

[ А-Яа-я ]{1,3}

Эта конструкция выберет из текста все русские слова из одной, двух или трёх букв (например, "или", "не", "я", "иду" и т.п.)

Кроме фигурных скобок с уществует ещё три метасимвола-квантификатора: "*" (звёздочка), "+" (плюс) и "?" (вопрос). Их испльзуют в случаях, когда заранее неизвестно минимальное и максимальное количество необходимых повторений. Например, при поиске адресов электронной почты нельзя заранее сказать, сколько символов будет в имени пользователя (до "собаки"), а сколько - в имени домена (после "собаки").

Метасимвол "*" читается как "любое количество от нуля и более", т.е. конструкция

\w* 

определяет любое количество последовательных букв, в том числе и их полное отсутствие.

Символ "+" отличается от звёздочки лишь тем, что требует наличия хотя-бы одного символа. Т.е. конструкция

\d+

соответствует любой цифровой последовательности, где цифр одна или более.

Символ "?" соответствует отсутствию или наличию единственного символа. Т.е. конструкция

\d?

соответствует любой цифровой последовательности, где цифр одна или две.

Здесь стоит упомянуть о такой особенности квантификаторов "*" и "+" как жадность. Суть в том, что по-умолчанию эти символы соответствуют максимально длинной последовательности символов. Например, для строки "мама мыла раму" выражение:

\.+а

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

\.+а?

и получим требуемое совпадение "ма".

Последний элемент языка - модификаторы. Модификатор - это спецсимвол, определяющий "системные" параметры анализа регулярных выражений. Таких символов всего четыре, они могут применяться как по отдельности, так и одновременно:

i Включает режим case-insensitive, т.е. большие и маленькие буквы в выражении не различаются.
m Указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк. По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы '^' и '$' указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста.
s По умолчанию метасимвол '.' не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение.
U Делает все количественные метасимволы "не жадными" по умолчанию. В некоторых модификациях языка (в частности в PHP) вместо "U" используется символ "g", более соответствующий смыслу ("g" - сокращение от английского "greedy", "жадный").

В таблице приведены наиболее популярные и нужные примеры регулярных выражений. Некторые из них могут показаться вам сложными и громоздкими, но при детальном изучении вы без сомнения разберётесь.

email [\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\ .A-Za-z0-9]{2,}
дата ^\d{1,2}([-. /])\d{1,2}\1\d{2,4}$
дробное число [\d]{4}\.[\d]{2}
номер мобильного телефона (?:8|\+7)? ?\(?(\d{3})\)? ?(\d{3})[ -]?(\d{2})[ -]?(\d{2})
Выделение текста между тегами /<tag>(.*)</tag>/Uis

Регулярные выражения в PHP.

Для работы с регулярными выражениями в PHP предназначены специальные функции, список которых и краткое описание приведены в таблице:

int preg_match (string pattern, string subject [, array matches])

Функция проверяет, совпадает ли содержимое subject с шаблоном pattern. Возвращает 1, если совпадения найдены, иначе возвращает 0. Если указать необязательный параметр-массив matches, то при выполнении функции в него будут занесен единственный элемент - первое найденное совпадение.

    <?php
    
    // исходная строка
    $value = "abcde 12345 klmnop";
    
    // шаблон для поиска
    $template = "/\w{5}/";
    
    // производим поиск
    $result = preg_match($template, $value, $matches); 
    
    echo "Совпадений: $result<br>";
    print_r($matches);
    ?>
      

Результат выполнения данного кода -

Совпадений: 1
Array ( [0] => abcde )
int preg_match_all (string pattern, string subject, array matches [, int order])
Функция идентична предыдущей, с единственным отличием - она производит поиск по всему тексту и возвращает в массиве matches ВСЕ найденные совпадения.
mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])
Как и обе предшествующие функции, preg_replace производит поиск фрагмента текста, соответствующего шаблону. Все найденные фрагменты функция заменяет на указанный в параметрах текст.
<?php
	$text = "текст\t\n\t\t до замены  \n  \t и  \n\n\n после   замены";
	echo "<b>До очистки:</b>\n$text\n\n";
	$text = preg_replace("/(\n \s{2,})/"," ",$text);
	echo "<b>После очистки:</b>\n$text";
    
    // выведет текст, очищенный от спецсимволов 
    // и лишних пробелов
?> 
    
Результат выполнения данного кода -

До очистки:
текст	
		 до замены  
  	 и  


 после   замены

После очистки:
текст	
		 до замены   и  


 после   замены
mixed preg_replace_callback (mixed pattern, mixed callback, mixed subject [, int limit])
Функция является расширенной версией предыдущей. Главное отличие - этой функции в параметрах передаётся имя функции, которая будет анализировать текст и формировать замещающий текст.
array preg_split (string pattern, string subject [, int limit [, int flags]])
Эта функция аналогична функциям explode() и split(). Её особенность в том, что в качестве разделителя выступает не фиксированная строка, а регулярное выражение. Функция разбивает исходные данные на элементы и помещает их в выходной массив.
        
<?php


	// загружаем текст из файла
	$text = join('',file('my_text.txt'));

	// разбиваем по словам
	$words = preg_split("/\s+/s",$text);

	// выводим результаты
	print_r($words);
    
?>
        
Результат выполнения данного кода -

Array ( [0] => width="100%" [2] => border="0" [3] => cellspacing="0" [4] => cellpadding="0"> [5] => [6] => [8] => [10] => [12] => [13] => [14] => [15] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => [29] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [37] => [38] => [119] => [120] => [121] => [122] => [123] => [124] => [125] => [126] => [127] => [128] => [131] => [132] => [133] => [134] => [135] => [136] => [137] => [138] => [139] => [140] => [146] => [147] => [148] => [149] => [150] => [151] => [152] => [153] => [154] => [155] => [168] => [169] => [170] => [171] => [172] => [173] => [174] => [175] => [176] => [177] => [186] => [187] => [188] => [189] => [190] => [191] => [192] => [193] => [194] => [195] => [205] => [206] => [207] => [208] => [209] => [210] => [211] => [212] => [213] => [214] => [223] => [224] => [225] => [226] => [227] => [228] => [229] => [230] => [231] => [232] => [243] => [244] => [245] => [246] => [247] => [248] => [249] => [250] => [251] => [252] => [255] => [256] => [257] => [258] => [259] => [260] => [261] => [262] =>
width="10%">  width="80%">  width="10%"> 
 Уроки [16] => php 
   
 [ href="?page=3">другие [28] => статьи] 
   
 

В [39] => данной [40] => серии [41] => статей [42] => Вы [43] => узнаете [44] => об [45] => основах [46] => создания [47] => сайтов [48] => на [49] => языке [50] => php.

[51] =>

Вы [52] => можете [53] => создавать [54] => скрипты [55] => на [56] => языке [57] => php [58] => и [59] => выполнять [60] => их [61] => на [62] => своём [63] => ПК, [64] => либо [65] => на [66] => хостинге [67] => с [68] => поддержкой [69] => языка [70] => php [71] => и [72] => баз [73] => данных [74] => my [75] => sql.

[76] =>

Можно [77] => начать [78] => работу [79] => сразу [80] => же [81] => с [82] => готового [83] => сайта. [84] => Для [85] => этого [86] => советую [87] => взять [88] => за [89] => основу [90] => одну [91] => из [92] => готовых [93] => систем [94] => для [95] => создания [96] => сайтов [97] => на [98] => php [99] => с [100] => открытым [101] => исходным [102] => кодом:

[103] =>

- [104] => href="?page=156">megainformatic [106] => cms [107] => free;

[108] =>

- [109] => href="?page=190">megainformatic [111] => cms [112] => express;

[113] =>

- [114] => href="?page=164">megainformatic [116] => cms [117] => express [118] => files;

 
   
 Рассмотрим [129] => следующие [130] => вопросы: 
   
 1) [141] => href="index.php?page=15">Введение [143] => в [144] => язык [145] => php; 
   
 2) [156] => href="index.php?page=12">Работа [158] => с [159] => базами [160] => данных [161] => MySQL [162] => Описано [163] => как [164] => создать [165] => простейший [166] => счётчик [167] => посещаемости. 
   
 3) [178] => href="index.php?page=16">Выводим [180] => дату [181] => и [182] => время [183] => в [184] => формате [185] => RU 
   
 4) [196] => href="index.php?page=13">Добавляем [198] => созданный [199] => счетчик [200] => на [201] => все [202] => страницы [203] => Вашего [204] => Сайта 
   
 5) [215] => href="index.php?page=216">Что [217] => нужно [218] => для [219] => создания [220] => собственного [221] => сайта [222] => ? 
   
 6) [233] => href="index.php?page=222">Шаги, [235] => которые [236] => потребуются [237] => для [238] => создания [239] => простого [240] => и [241] => функционального [242] => сайта 
   
 [ href="index.php?page=3">другие [254] => статьи] 
   
)
array preg_grep (string pattern, array input)
Функция предназначена для регулярного поиска в массивах. Для поиска задаётся шаблон и массив входных данных, а возвращается массив, состоящий только из элементов, соответствющих шаблону.

Рассмотренный список функций далеко не полон, но вполне достаточен для успешного начала работы с регулярными выражениями. Если вы заинтересовались этой темой - обязательно почитайте дополнительную литературу (например, книгу Фридла "Регулярные выражения"). Кроме того, в целях обучения рекомендую поставить одну из специальных программ для тестирования регулярных выражений (например, "PCRE" или "RegEx Builder").

- Конец текста статьи

Спасибо Сергею, за очень полезную и информативную статью !



А теперь небольшое веб-приложение для тестирования регулярных выражений

Регулярное выражение:


Строка поиска




И небольшая шпаргалка по синтаксису регулярных выражений -

шпаргалка по синтаксису регулярных выражений [к содержанию]

 

Оставленные комментарии



Рейтинг@Mail.ru
Время загрузки: 0,0152