public function parse() { // Implement parsing of values like 3 л + 3 л + ... , we need to count their summary here $exploded_values = explode('+', $this->value); if (!empty($exploded_values) && count($exploded_values) > 1) { $summ = 0; foreach ($exploded_values as $value) { $parser = new VolumeCat4405SpecParser(trim($value)); $parsed = $parser->parse(); if ($parsed) { $summ += $parsed[0]['value']; } else { $this->parsed = false; $this->matched_regex = ''; return $this->parsed; } } $this->parse_called = true; $this->parsed = array(array('key' => 'Объем', 'value' => $summ, 'measure' => $parser->getParsed()[0]['measure'])); $this->parsed = $this->validateParsed($this->parsed); return $this->parsed; } else { return parent::parse(); } }
protected function patterns() { $patterns = array(); $measures_list = implode('|', parent::getMeasureAliases($this->measures)); $measures = $this->measures; $current_key = $this->current_key; $patterns = parent::generateSimplePatterns($current_key, $measures); 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() { $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('|', NumericSpecParser::getMeasureAliases($measures)); $patterns = $this->generateSimplePatterns('Ширина', $this->measures); $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)); }; $patterns['/^\\d+$/mi'] = function ($matches) { return NULL; }; return $patterns; }
protected function patterns() { $current_key = $this->current_key; $measures = $this->measures; $measures_list = implode('|', $this->getMeasureAliases($measures)); $patterns = parent::generateSimplePatterns($current_key, $this->measures); // 60...90 Мб/с $patterns['/^(\\d+\\.?\\d*)\\.\\.\\.(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) use($measures, $current_key) { $return = []; $return[] = array('key' => $current_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('|', NumericSpecParser::getMeasureAliases($measures)); $patterns = $this->generateSimplePatterns('Размеры', $this->measures); // 107x62x34 мм // 107x62 мм // мы не можем парсить такие значения так как не знаем очередность величин $patterns['/^(\\d+\\.?\\d*)\\s?x\\s?(\\d+\\.?\\d*)\\s?x\\s?(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) { return NULL; }; $patterns['/^(\\d+\\.?\\d*)\\s?x\\s?(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) { return NULL; }; // варианты с х в русской раскладке $patterns['/^(\\d+\\.?\\d*)\\s?х\\s?(\\d+\\.?\\d*)\\s?х\\s?(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) { return NULL; }; $patterns['/^(\\d+\\.?\\d*)\\s?х\\s?(\\d+\\.?\\d*)\\s(' . $measures_list . ')$/mi'] = function ($matches) { return NULL; }; // 31 - 36 // 31 - 36 (...) // похоже на размер одежды, и нет ед измерений, так что пропускаем $patterns['/^(\\d+\\.?\\d*)\\s?-\\s?(\\d+\\.?\\d*)$/mi'] = function ($matches) { return NULL; }; $patterns['/^(\\d+\\.?\\d*)\\s?-\\s?(\\d+\\.?\\d*)\\s?\\(.*\\)$/mi'] = function ($matches) { return NULL; }; // 31 // просто число без ед измерений, пропускаем $patterns['/^\\d+$/mi'] = function ($matches) { return NULL; }; return $patterns; }
protected function patterns() { $patterns = parent::generateSimplePatterns($this->current_key, $this->measures); return $patterns; }
public function parse() { if ($this->parse_called) { return $this->getParsed(); } if ($this->options['debug']) { echo "Trying to match value '{$this->value}' \n"; } $measures = $this->measures; $measures_list = implode('|', $this->getMeasureAliases($measures)); $parse_exploded = function ($exploded_values, &$this, $pattern) { if ($this->options['debug']) { echo "Exploded values are " . var_export($exploded_values, true) . " \n"; } $result = array(); foreach ($exploded_values as $value) { $parser = new PowerSpecParser(trim($value)); if ($this->options['debug']) { $parser->setOption('debug', true); } $parsed = $parser->parse(); if ($parsed) { $result = array_merge($result, $parsed); } } if (!empty($result)) { $this->parsed = $result; $this->parsed = $this->validateParsed($this->parsed); $this->matched_regex = $pattern; $this->parse_called = true; if ($this->options['debug']) { echo "Parse result is " . var_export($this->parsed, true) . " \n"; } return $this->parsed; } else { if ($this->options['debug']) { echo "Parse result is empty \n"; } $this->parsed = false; $this->parse_called = true; $this->matched_regex = ''; return false; } }; // First, try to process special cases. // parse 40 Вт (номинальная), 140 Вт (максимальная) $pattern = '/^(.+)\\s(' . $measures_list . ')\\s\\(номинальная\\),\\s(.+)\\s(' . $measures_list . ')\\s\\(максимальная\\)$/mi'; if (preg_match($pattern, $this->value)) { $exploded_values = explode(',', $this->value); if (!empty($exploded_values) && count($exploded_values) == 2) { return $parse_exploded($exploded_values, $this, $pattern); } } // 30 л.с., 22000 Вт $pattern = '/^(.+)\\s(' . implode('|', $measures['л.с.']) . '),\\s(.+)\\s(' . $measures_list . ')$/mi'; if (preg_match($pattern, $this->value)) { $exploded_values = explode(',', $this->value); if (!empty($exploded_values) && count($exploded_values) == 2) { return $parse_exploded(array($exploded_values[0]), $this, $pattern); } } // 1600 Вт / 2.1 л. с. $pattern = '/^(.+)\\s(' . $measures_list . ')\\s\\/\\s(.+)\\s(' . implode('|', $measures['л.с.']) . ')$/mi'; if (preg_match($pattern, $this->value)) { $exploded_values = explode('/', $this->value); if (!empty($exploded_values) && count($exploded_values) == 2) { return $parse_exploded(array($exploded_values[1]), $this, $pattern); } } // 1600 Вт (макс.|пиковая 2000 Вт) $electric_measures = array_diff_key($measures, array('л.с.' => '')); $electric_measures = $this->getMeasureAliases($electric_measures); $electric_measures = implode('|', $electric_measures); $pattern = '/^((.+)\\s(' . $electric_measures . '))\\s\\((макс\\.|пиковая)\\s((.+)\\s(' . $electric_measures . '))\\)$/mi'; $matches = array(); if (preg_match($pattern, $this->value, $matches)) { $result = array(); $parser_nominal = new PowerSpecParser(trim($matches[1])); $parser_nominal->parse(); $parser_max = new PowerSpecParser(trim($matches[5])); $parser_max->parse(); if ($parser_nominal->getParsed()) { $result[] = array('value' => $parser_nominal->getParsed()[0]['value'], 'measure' => $parser_nominal->getParsed()[0]['measure'], 'key' => 'Мощность номинальная'); } if ($parser_max->getParsed()) { $result[] = array('value' => $parser_max->getParsed()[0]['value'], 'measure' => $parser_max->getParsed()[0]['measure'], 'key' => 'Мощность максимальная'); } if (!empty($result)) { $this->parsed = $result; $this->parsed = $this->validateParsed($this->parsed); $this->matched_regex = $pattern; $this->parse_called = true; if ($this->options['debug']) { echo "Parse result is " . var_export($this->parsed, true) . " \n"; } return $this->parsed; } else { if ($this->options['debug']) { echo "Parse result is empty \n"; } $this->parsed = false; $this->parse_called = true; $this->matched_regex = ''; return false; } } // If the parsed value should not be processed by code above let it to be processed by standard method with patterns declared in $this->patterns. return parent::parse(); }