вторник, 11 июня 2013 г.

Кусок PHP кода для генерации regexp

Создаем regexp для фильтрации дат отстоящих на +-3 года от заданой
кому надо тот переделает


     $start = '15.07.1986';
     $start = explode('.',$start);
     $start = $start[2];
     $start -=3;
     $reg_f = array();
     $reg_f[0] = floor($start/100); //Определяем век рождения
     $reg_f[1] = floor(($start%100)/10); //Определям десятилетие
     $reg_f[2] = ($start%10); //Определяем год
     $start += 6;
     $reg_l = array();
     $reg_l[0] = floor($start/100); //Определяем век рождения
     $reg_l[1] = floor(($start%100)/10); //Определям десятилетие
     $reg_l[2] = ($start%10); //Определяем год
     $delta = array_diff_assoc($reg_l,$reg_f);//определяем где разница

     if (isset($delta[0]))  //Люди с разных веков
      $regexp .= '('.$reg_f[0].'|'.$reg_l[0].')';
     else  $regexp .= '('.$reg_f[0].')'; //Люди одного века

     $des = array();
     if (isset($delta[1]))//Разные десятилетия
      {
       for ($i=min($reg_l[1],$reg_f[1]);$i<=max($reg_l[1],$reg_f[1]);$i++)
        $des[] = $i;
      // $regexp.= '('.implode('|',$des).')';
      }
     else $regexp.='('.$reg_l[1].')'; //Одинаковые десятилетия

     if (isset($delta[2])) //Разные года
      {
       if (empty($des)) //Если нам феерически везет и десителетия совпали
            $regexp .= '['.$reg_f[2].'-'.$reg_l[2].']';
       else //Здравствуй, невезуха
         {
          $des[0] .= '['.$reg_f[2].'-9]';
          $des[1] .= '[0-'.$reg_l[2].']';
          $regexp .= '('.implode('|',$des).')';
         }
      }
     $regexp .= '/';