Попогите вырезать код из даты и диапазона дат

Статус
В этой теме нельзя размещать новые ответы.

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.596
Реакции
1.104
  • Автор темы
  • Модер.
  • #1
Приветствую всех. Уже больше недели пытался нагуглить как это реализовать, но что то не могу найти нормальной рабочей регулярки на php. В общем нужна регулярка чтобы удалить все, кроме годов в числах, числа могут быть таких форматов:
Код:
30.08.2016
1.10.2015
30.08.2016 - 1.10.2015
1 января 2012
1 января 2012 года
 

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.596
Реакции
1.104
  • Автор темы
  • Модер.
  • #3
Как я только ни пробовал добавить в код, у меня ничего не получилось :facepalm:
PHP:
foreach($xfields as $value){  // перебор значений массива
    if($value[xfields]){ //проверяем есть ли элемент в массиве
   
        $row = xfieldsdataload($value[xfields]); //получаем нужное нам доп поле
        if($row[$xfield]){ //проверяем есть ли значение
           
            $rowdata = explode( ",", $row[$xfield]); //разбиваем наше значение на массив
            foreach($rowdata as $value){    //перебираем значения массива
                if($value){                    //проверяем есть ли значение
                    $value = trim($value);    //убираем пробелы
                    array_push($stack, $value); //добавляем в конец массива полученное значение
                    }
                }
            }
        }
    }
пытался ставить и после и перед "удалением пробелов" в значениях, но всё было безуспешно. Уже не вспомню что именно писал, но пробовал несколько вариантов что нагуглил в начале месяца.
 

Sorcus

Sorcus. A New Beginning.
Регистрация
10 Июл 2011
Сообщения
513
Реакции
1.002
Как я только ни пробовал добавить в код, у меня ничего не получилось :facepalm:
Так что-ли?
date.list
Код:
30.08.2016
1.10.2015
30.08.2016 - 1.10.2015
1 января 2012
1 января 2012 года
init.rb
Код:
years_list = File.open('./date.list', 'r')

years = Array.new

years_list.each_line do |line|
    line.strip.split.each do |year|
        years << year.gsub!(/.*([\d]{4}).*/, '\1')
    end
end

puts years.compact
output
Код:
laptop% ruby -w init.rb
2016
2015
2016
2015
2012
2012

Хотя лучше вот так. Тогда все года вытаскивает.
Код:
years_list = File.open('./date.list', 'r')

years = Array.new

years_list.each_line do |line|
    years << line.scan(/[0-9]{4}/)
end

puts years
Код:
laptop% ruby -w init.rb
2016
2015
2016
2015
2012
2012
P.S. Первый вариант тоже вытаскивает, но этот короче и понятнее.
 
Последнее редактирование модератором:

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.596
Реакции
1.104
  • Автор темы
  • Модер.
  • #5
Хотя лучше вот так. Тогда все года вытаскивает.
и как это прикрутить к коду выше?
Пробовал через
PHP:
$result = preg_match('/[0-9]{4}/',$value,$found);
добавлял его после
PHP:
$value = trim($value);
и потом собирал $result в массив $stack. В результате у меня кажется выводилось только пару значений каких то никаким образом не похожих на года четырехзначные :confused:
 

Sorcus

Sorcus. A New Beginning.
Регистрация
10 Июл 2011
Сообщения
513
Реакции
1.002
Откуда я знаю, я не php кодер :D
Я лишь привел пример на ruby, который делает то, что тебе по идее нужно. А дальше уже сам по аналогии на php себе собирай :crazy:
 

lag

Мой дом здесь!
Регистрация
13 Окт 2014
Сообщения
290
Реакции
366
и как это прикрутить к коду выше?
Пробовал через
PHP:
$result = preg_match('/[0-9]{4}/',$value,$found);
добавлял его после
PHP:
$value = trim($value);
и потом собирал $result в массив $stack. В результате у меня кажется выводилось только пару значений каких то никаким образом не похожих на года четырехзначные :confused:
Для просмотра ссылки Войди или Зарегистрируйся
Cовпавшая часть строки будет в $found[0], а не в $result.

PHP:
            $rowdata = explode( ",", $row[$xfield]); //разбиваем наше значение на массив
            foreach($rowdata as $value){    //перебираем значения массива
                if($value){                    //проверяем есть ли значение
                    $value = trim($value);    //убираем пробелы
                    array_push($stack, $value); //добавляем в конец массива полученное значение
                    }
                }
Заменить на
PHP:
            preg_match_all('/[0-9]{4}/', $row[$xfield], $matches);
            $stack = array_merge($stack, $matches[0]);
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху