protected function patterns()
 {
     $measure_aliases = array('Гб' => array('Гб', 'ГБ'), 'Мб' => array('Мб', 'МБ'), 'Тб' => array('Тб', 'ТБ'));
     $current_key = $this->current_key;
     $measures_list = implode('|', $this->getMeasureAliases($measure_aliases));
     $patterns = $this->generateSimplePatterns($current_key, $measure_aliases);
     // 1 модуль 16 Гб
     $patterns['/^1\\sмодуль\\s(\\d+)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measure_aliases, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measure_aliases));
     };
     // 4 модуля по 4 Гб
     $patterns['/^(\\d+)\\sмодуля\\sпо\\s(\\d+)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measure_aliases, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1] * $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measure_aliases));
     };
     // 8 модулей по 8 Гб
     $patterns['/^(\\d+)\\sмодулей\\sпо\\s(\\d+)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measure_aliases, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1] * $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measure_aliases));
     };
     // 4 Гб ( ... )
     $patterns['/^(\\d+)\\s(' . $measures_list . ')\\s\\(.+\\)$/mi'] = function ($matches) use($measure_aliases, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measure_aliases));
     };
     // 1...3 Гб => 3 Гб
     $patterns['/^(\\d+\\.?\\d*)\\.\\.\\.(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measure_aliases, $current_key) {
         return array('key' => $current_key, 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measure_aliases));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $patterns = array();
     $measures_list = implode('|', parent::getMeasureAliases($this->measures));
     $measures = $this->measures;
     $patterns['/(\\d+)\\s?(' . $measures_list . ')/mi'] = function ($matches) use($measures) {
         $min_key = array_search(min($matches[1]), $matches[1]);
         return array('key' => 'Отношение сигнал/шум (не меньше)', 'value' => $matches[1][$min_key], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2][$min_key], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     //$patterns = $this->generateSimplePatterns('Поддержка карт памяти', $measures);
     $patterns = array();
     $patterns['/.*до\\s(\\d+)\\s?(' . $measures_list . ').*/i'] = function ($matches) use($measures) {
         return array('value' => $matches[1], 'key' => 'Поддержка карт памяти, до', 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measure_aliases = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measure_aliases));
     $current_key = $this->current_key;
     $patterns = [];
     $patterns['/(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measure_aliases, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measure_aliases));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns('Частота процессора', $measures);
     // 0...5600 мА·ч
     $patterns['/^(\\d+\\.?\\d*)\\.\\.\\.(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Частота процессора', 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns('Импеданс', $measures);
     // 4-8 Ом
     $patterns['/^(\\d+\\.?\\d*)\\s?(-|–)\\s?(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Импеданс', 'value' => $matches[3], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = [];
     // строк: 24-94 кГц; кадров: 50-76 Гц
     $patterns['/(\\d\\.?\\d*)\\s?(' . $measures_list . ')/mi'] = function ($matches) use($measures) {
         $max_key = array_search(max($matches[1]), $matches[1]);
         return array('key' => 'Коэффициент гармоник (не больше)', 'value' => $matches[1][$max_key], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2][$max_key], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns('Чувствительность', $this->measures);
     // 0.16 мкВ (12dB SINAD)
     // 83 дБ (Вт/м)
     $patterns['/^(\\d+\\.?\\d*)\\s?(' . $measures_list . ')\\s\\(.*\\)$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Чувствительность', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $patterns = array();
     $measures_list = implode('|', parent::getMeasureAliases($this->measures));
     $measures = $this->measures;
     $current_key = $this->current_key;
     $patterns['/(\\d+)\\s?(' . $measures_list . ')/mi'] = function ($matches) use($measures, $current_key) {
         $max_key = array_search(max($matches[1]), $matches[1]);
         return array('key' => $current_key, 'value' => $matches[1][$max_key], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2][$max_key], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns($this->current_key, $measures);
     $patterns['/^(\\d+\\.?\\d*)\\.\\.\\.(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         $return = [];
         $return[] = array('key' => 'Вылет (ET), от', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
         $return[] = array('key' => 'Вылет (ET), до', 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
         return $return;
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     // 3 - 33000 Гц
     $patterns['/^(\\d+)\\s?(-|–)\\s?(\\d+)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array(array('key' => 'Минимальная частота', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $measures)), array('key' => 'Максимальная частота', 'value' => $matches[3], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $measures)));
     };
     // 35-20000 Гц (-10 дБ)
     $patterns['/^(\\d+)\\s?(-|–)\\s?(\\d+)\\s?(' . $measures_list . ')\\s\\(.*\\)$/mi'] = function ($matches) use($measures) {
         return array(array('key' => 'Минимальная частота', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $measures)), array('key' => 'Максимальная частота', 'value' => $matches[3], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $measures)));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns('Уровень шума', $this->measures);
     // 19-21 дБА
     $patterns['/^(\\d+\\.?\\d*)\\s?-\\s?(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Уровень шума', 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // до 40 дБ
     $patterns['/^до\\s(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Уровень шума', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $current_key = $this->current_key;
     $patterns = $this->generateSimplePatterns($current_key, $measures);
     // строк: 24-94 кГц; кадров: 50-76 Гц
     $patterns['/^строк:\\s\\d+-\\d+\\sкГц;\\sкадров:\\s(\\d+)-(\\d+)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // ...кадров: 50-76 Гц...
     $patterns['/.*кадров:\\s(\\d+)-(\\d+)\\s(' . $measures_list . ').*/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns($this->current_key, $measures);
     if ($this->current_key == 'Водостойкость тента/дна') {
         // 5000 / 5000 мм в.ст.
         $patterns['/^(\\d+)\\s\\/\\s(\\d+)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
             $return = [];
             $return[] = array('key' => 'Водостойкость тента', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
             $return[] = array('key' => 'Водостойкость дна', 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
             return $return;
         };
     }
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = array();
     $patterns['/^(\\d+\\.?\\d*)\\s?x\\s?(\\d+\\.?\\d*)\\s?x\\s?(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         $measure = \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $measures);
         return array(array('key' => 'Ширина', 'value' => $matches[1], 'measure' => $measure), array('key' => 'Глубина', 'value' => $matches[2], 'measure' => $measure), array('key' => 'Высота', 'value' => $matches[3], 'measure' => $measure));
     };
     // вариант с х в русской раскладке
     $patterns['/^(\\d+\\.?\\d*)\\s?х\\s?(\\d+\\.?\\d*)\\s?х\\s?(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         $measure = \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $measures);
         return array(array('key' => 'Ширина', 'value' => $matches[1], 'measure' => $measure), array('key' => 'Глубина', 'value' => $matches[2], 'measure' => $measure), array('key' => 'Высота', 'value' => $matches[3], 'measure' => $measure));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $current_key = $this->current_key;
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns($this->current_key, $measures);
     // при работе: 90 Вт*
     $patterns['/^при\\sработе:\\s(\\d+(\\.|,)?\\d*)\\s(' . $measures_list . ').*/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => str_replace(',', '.', $matches[1]), 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // 90 Вт*
     $patterns['/^(\\d+)\\s?(' . $measures_list . ').+/'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     $patterns['/^(\\d+(\\.|,){1}\\d+)\\s?(' . $measures_list . ').+/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => str_replace(',', '.', $matches[1]), 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns('Чувствительность', $this->measures);
     // 100 - 3200 ISO
     $patterns['/^(\\d+\\.?\\d*)\\s?-\\s?(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Чувствительность', 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // 100 - 3200 ISO ...
     $patterns['/^(\\d+\\.?\\d*)\\s?-\\s?(\\d+\\.?\\d*)\\s?(' . $measures_list . ')/mi'] = function ($matches) use($measures) {
         return array('key' => 'Чувствительность', 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // 100 ISO ...
     $patterns['/^(\\d+)\\s?(' . $measures_list . ')/mi'] = function ($matches) use($measures) {
         return array('key' => 'Чувствительность', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     return array('/^(\\d+\\.{1}\\d+)\\s?(' . $measures_list . '){1}$/mi' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
         return $parsed;
     }, '/^(\\d+)\\s?(' . $measures_list . '){1}$/mi' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
         return $parsed;
     }, '/^(\\d+\\.{1}\\d+)\\s?(' . $measures_list . '){1}(.*)/i' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
         return $parsed;
     }, '/^(\\d+)\\s?(' . $measures_list . '){1}(.*)/i' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
         return $parsed;
     }, '/^(\\d+\\.{0,1}\\d*)\\.\\.\\.(\\d+\\.{0,1}\\d*)\\s*(' . $measures_list . '){1}$/mi' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
         return $parsed;
     }, '/^(\\d+\\.{0,1}\\d*)-(\\d+\\.{0,1}\\d*)\\s*(' . $measures_list . '){1}$/mi' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
         return $parsed;
     }, '/^(\\d+)\\,{1}(\\d+)\\s?(' . $measures_list . '){1}$/mi' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[1] . '.' . $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
         return $parsed;
     }, '/^(\\d+\\.{1}\\d+)$/mi' => function ($matches) use($measures) {
         $parsed = array();
         $parsed[] = array('value' => $matches[1], 'measure' => 'кг');
         return $parsed;
     }, '/^(\\d+)$/mi' => function ($matches) {
         $parsed = array();
         $parsed[] = array('value' => $matches[1], 'measure' => 'кг');
         return $parsed;
     });
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $current_key = $this->current_key;
     $patterns = $this->generateSimplePatterns($current_key, $measures);
     // 50" (127 см)
     $patterns['/^(\\d+)\\s?(' . $measures_list . ')\\s\\(\\d+\\sсм\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     $patterns['/^(\\d+(\\.|,){1}\\d+)\\s?(' . $measures_list . ')\\s\\(\\d+\\sсм\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     if ($current_key == 'Диагональ экрана') {
         $patterns['/^(\\d\\.?\\d*)$/'] = function ($matches) use($current_key) {
             return array('key' => $current_key, 'value' => $matches[1], 'measure' => 'дюйм.');
         };
     }
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $patterns = $this->generateSimplePatterns('Емкость аккумулятора', $measures);
     // 7000 мА⋅ч (26 Вт⋅ч)
     $patterns['/^(\\d+\\.?\\d*)\\s?(' . $measures_list . ')\\s\\(.*\\)$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Емкость аккумулятора', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     // 0...5600 мА·ч
     $patterns['/^(\\d+\\.?\\d*)\\.\\.\\.(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Емкость аккумулятора', 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // 700 мА*ч или 150 фотографий
     $patterns['/^(\\d+\\.?\\d*)\\s?(' . $measures_list . ').*/mi'] = function ($matches) use($measures) {
         return array('key' => 'Емкость аккумулятора', 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     // 700 фотографий
     $patterns['/^(\\d+)\\sфотографий$/mi'] = function ($matches) use($measures) {
         return array('key' => 'Емкость аккумулятора', 'value' => $matches[1], 'measure' => 'фотографий');
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     // We can't use $this->generateSimplePatterns() as it can't work with parse() using preg_match_all;
     $patterns = array();
     $patterns['/^(\\d+)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('value' => $matches[1][0], 'key' => 'Угол обзора', 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2][0], $measures));
     };
     $patterns['/^(\\d+\\.\\d+)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('value' => $matches[1][0], 'key' => 'Угол обзора', 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2][0], $measures));
     };
     // 8.12 - 75.24 град.мин
     $patterns['/^(\\d+\\.?\\d*)\\s?-\\s?(\\d+\\.?\\d*)\\s?(' . $measures_list . ')$/mi'] = function ($matches) use($measures) {
         return array('value' => $matches[2][0], 'key' => 'Угол обзора', 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3][0], $measures));
     };
     // 145° (по диагонали), 125° (по ширине), 166° (по высоте)
     // select the max one
     $patterns['/(^|\\s)(\\d+)\\s?(' . $measures_list . ')/i'] = function ($matches) use($measures) {
         $max_key = array_search(max($matches[2]), $matches[2]);
         return array('value' => $matches[2][$max_key], 'key' => 'Угол обзора', 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3][$max_key], $measures));
     };
     return $patterns;
 }
 protected function patterns()
 {
     $measures = $this->measures;
     $measures_list = implode('|', $this->getMeasureAliases($measures));
     $electric_measures = array_diff_key($measures, array('л.с.' => ''));
     $electric_measures_list = implode('|', $this->getMeasureAliases($electric_measures));
     $current_key = $this->current_key;
     $patterns = $this->generateSimplePatterns($this->current_key, $measures);
     // 10...12 л.с. => 12 л.с.
     $patterns['/^(\\d+\\.?\\d*)\\.\\.\\.(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // XX Вт (номинальная)
     $patterns['/^(\\d+)\\s(' . $measures_list . ')\\s\\(номинальная\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key == 'Мощность' ? 'Мощность номинальная' : $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     $patterns['/^(\\d+\\.\\d+)\\s(' . $measures_list . ')\\s\\(номинальная\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key == 'Мощность' ? 'Мощность максимальная' : $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     // XX Вт (максимальная)
     $patterns['/^(\\d+)\\s(' . $measures_list . ')\\s\\(максимальная\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key == 'Мощность' ? 'Мощность максимальная' : $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     $patterns['/^(\\d+\\.\\d+)\\s(' . $measures_list . ')\\s\\(максимальная\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key == 'Мощность' ? 'Мощность максимальная' : $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     // 2400 Вт (выходная 1600 Вт)
     $patterns['/^(\\d+)\\s(' . $electric_measures_list . ')\\s\\(выходная\\s(.+)\\s(' . $electric_measures_list . ')\\)$/mi'] = function ($matches) use($electric_measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $electric_measures));
     };
     $patterns['/^(\\d+\\.\\d+)\\s(' . $electric_measures_list . ')\\s\\(выходная\\s(.+)\\s(' . $electric_measures_list . ')\\)$/mi'] = function ($matches) use($electric_measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $electric_measures));
     };
     // 800 ВА / 480 Вт
     $patterns['/^(\\d|\\.)+\\sВА\\s\\/\\s(\\d+)\\s(' . $electric_measures_list . ')$/mi'] = function ($matches) use($electric_measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[2], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $electric_measures));
     };
     $patterns['/^(\\d|\\.)+\\s(ВА|кВ·А)\\s\\/\\s(\\d+\\.\\d+)\\s(' . $electric_measures_list . ')$/mi'] = function ($matches) use($electric_measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[3], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[4], $electric_measures));
     };
     // 300 Вт, при блокировке мотора: 2000 Вт
     $patterns['/^(\\d+)\\s(' . $electric_measures_list . '),\\sпри\\sблокировке\\sмотора:\\s((\\d|\\.)+)\\s(' . $electric_measures_list . ')$/mi'] = function ($matches) use($electric_measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $electric_measures));
     };
     $patterns['/^(\\d+\\.\\d+)\\s(' . $electric_measures_list . '),\\sпри\\sблокировке\\sмотора:\\s((\\d|\\.)+)\\s(' . $electric_measures_list . ')$/mi'] = function ($matches) use($electric_measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $electric_measures));
     };
     // 2400 <measure> (...)
     $patterns['/^(\\d+)\\s?(' . $measures_list . ')\\s\\(.+\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => $matches[1], 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     $patterns['/^(\\d+(\\.|,){1}\\d+)\\s?(' . $measures_list . ')\\s\\(.+\\)$/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => str_replace(',', '.', $matches[1]), 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     // 2400 <measure>...
     $patterns['/^(\\d+)\\s?(' . $measures_list . ').+/'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => str_replace(',', '.', $matches[1]), 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[2], $measures));
     };
     $patterns['/^(\\d+(\\.|,){1}\\d+)\\s?(' . $measures_list . ').+/mi'] = function ($matches) use($measures, $current_key) {
         return array('key' => $current_key, 'value' => str_replace(',', '.', $matches[1]), 'measure' => \common\spec_parsers\NumericSpecParser::getMeasureByAlias($matches[3], $measures));
     };
     return $patterns;
 }