2012-03-22 9 views
2

xampp上のSimplePie 1.3デベロッパーバージョンPHP 5.3。SimplePieの正規表現エラー

私はRSSフィードを取得し、それを表示することができていますが、私は、フェッチされたすべての項目のためのこれらのエラーを取得:

警告:するpreg_match()[function.pregがマッチ]:コンパイルが失敗しました:何を繰り返しますpreg_match()[function.preg-match]:コンパイルに失敗しました:C:\ xampp \ htdocsのオフセット509で何も繰り返されません。 \ simplepie.php on line 5965

警告:preg_match()[function.preg-match]:コンパイルに失敗しました:何もありません泥炭は、Cで509オフセット:\ XAMPP \ htdocsに\ simplepie.php線上6031

エラーが発生機能:

/** 
* Parse RFC2822's date format 
* 
* @access protected 
* @return int Timestamp 
*/ 
public function date_rfc2822($date) 
{ 
    static $pcre; 
    if (!$pcre) 
    { 
     $wsp = '[\x09\x20]'; 
     $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; 
     $optional_fws = $fws . '?'; 
     $day_name = $this->day_pcre; 
     $month = $this->month_pcre; 
     $day = '([0-9]{1,2})'; 
     $hour = $minute = $second = '([0-9]{2})'; 
     $year = '([0-9]{2,4})'; 
     $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; 
     $character_zone = '([A-Z]{1,5})'; 
     $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; 
     $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; 
    } 
    if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) 

/** 
* Parse RFC850's date format 
* 
* @access protected 
* @return int Timestamp 
*/ 
public function date_rfc850($date) 
{ 
    static $pcre; 
    if (!$pcre) 
    { 
     $space = '[\x09\x20]+'; 
     $day_name = $this->day_pcre; 
     $month = $this->month_pcre; 
     $day = '([0-9]{1,2})'; 
     $year = $hour = $minute = $second = '([0-9]{2})'; 
     $zone = '([A-Z]{1,5})'; 
     $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i'; 
    } 
    if (preg_match($pcre, $date, $match)) 

/** 
* Parse C99's asctime()'s date format 
* 
* @access protected 
* @return int Timestamp 
*/ 
public function date_asctime($date) 
{ 
    static $pcre; 
    if (!$pcre) 
    { 
     $space = '[\x09\x20]+'; 
     $wday_name = $this->day_pcre; 
     $mon_name = $this->month_pcre; 
     $day = '([0-9]{1,2})'; 
     $hour = $sec = $min = '([0-9]{2})'; 
     $year = '([0-9]{4})'; 
     $terminator = '\x0A?\x00?'; 
     $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; 
    } 
    if (preg_match($pcre, $date, $match)) 

エラーiで参照される行■各関数の最後のif式(you can see full code here)。

各関数の$ pcreには正規表現がないと思います。

あなたは

答えて

0

何が正規表現が間違っている場合、それはコンパイルべきではありませんありがとうございました。
$this->day_pcre$this->month_pcreには、正規表現が正しくない可能性のあるメタ文字が含まれている場合があります。それをよく確認する。

私は 'Mon'と 'Oct'と置き換えてIdeoneで実行しました。仕事をしているようだ。サイドノートとして

、あなたは$ FWS交換したいかもしれません - 彼らは同等であり、おそらく、より効率的であるよう$fws = '(?:(?:(?:\x0D\x0A)?' . $wsp . ')+)'

$fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'
から

を。

関数では、
$day/$month/$pcreという変数の正規表現を出力する必要があります。どのようにデバッグすることができますか?

これは別のものかもしれませんが、わかりません。ここで

は私が得るものです:http://ideone.com/zJ5vE

コード

<?php 

date_asctime("Mon Oct 21 11:21:31 2012\x0A"); 
date_asctime("Mon Oct 22 12:22:32 2012\x0A"); 
date_asctime("Mon Oct 23 13:23:33 2012\x0A"); 

print("==================\n"); 

date_rfc2822('Mon, 21 Oct 2012 21:01 -1011'); 
date_rfc2822('Mon, 22 Oct 2012 22:02 -1012'); 
date_rfc2822('Mon, 23 Oct 2012 23:03 -1013'); 


/** 
* Parse C99's asctime()'s date format 
* 
* @access protected 
* @return int Timestamp 
*/ 
function date_asctime($date) 
{ 
    static $pcre; 
    if (!$pcre) 
    { 
     $space = '[\x09\x20]+'; 

     $wday_name = 'Mon'; //$this->day_pcre; 
     $mon_name = 'Oct'; //$this->month_pcre; 

     $day = '([0-9]{1,2})'; 
     $hour = $sec = $min = '([0-9]{2})'; 
     $year = '([0-9]{4})'; 
     $terminator = '\x0A?\x00?'; 
     $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i'; 
    } 
    if (preg_match($pcre, $date, $match)) 
    { 
     print_r($match); 
    } 
} 


/** 
* Parse RFC2822's date format 
* 
* @access protected 
* @return int Timestamp 
*/ 
function date_rfc2822($date) 
{ 
    static $pcre; 
    if (!$pcre) 
    { 
     $wsp = '[\x09\x20]'; 

     // $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)'; 
     $fws = '(?:(?:(?:\x0D\x0A)?' . $wsp . ')+)'; 
     $optional_fws = $fws . '?'; 

     $day_name = 'Mon'; //$this->day_pcre; 
     $month = 'Oct';  //$this->month_pcre; 

     $day = '([0-9]{1,2})'; 
     $hour = $minute = $second = '([0-9]{2})'; 
     $year = '([0-9]{2,4})'; 
     $num_zone = '([+\-])([0-9]{2})([0-9]{2})'; 
     $character_zone = '([A-Z]{1,5})'; 
     $zone = '(?:' . $num_zone . '|' . $character_zone . ')'; 
     $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i'; 
    } 
    // if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) 
    if (preg_match($pcre, $date, $match)) 
    { 
     print_r($match); 
    } 
} 
?> 

出力

Array 
(
    [0] => Mon Oct 21 11:21:31 2012 

    [1] => 21 
    [2] => 11 
    [3] => 21 
    [4] => 31 
    [5] => 2012 
) 
Array 
(
    [0] => Mon Oct 22 12:22:32 2012 

    [1] => 22 
    [2] => 12 
    [3] => 22 
    [4] => 32 
    [5] => 2012 
) 
Array 
(
    [0] => Mon Oct 23 13:23:33 2012 

    [1] => 23 
    [2] => 13 
    [3] => 23 
    [4] => 33 
    [5] => 2012 
) 
================== 
Array 
(
    [0] => Mon, 21 Oct 2012 21:01 -1011 
    [1] => 21 
    [2] => 2012 
    [3] => 21 
    [4] => 01 
    [5] => 
    [6] => - 
    [7] => 10 
    [8] => 11 
) 
Array 
(
    [0] => Mon, 22 Oct 2012 22:02 -1012 
    [1] => 22 
    [2] => 2012 
    [3] => 22 
    [4] => 02 
    [5] => 
    [6] => - 
    [7] => 10 
    [8] => 12 
) 
Array 
(
    [0] => Mon, 23 Oct 2012 23:03 -1013 
    [1] => 23 
    [2] => 2012 
    [3] => 23 
    [4] => 03 
    [5] => 
    [6] => - 
    [7] => 10 
    [8] => 13 
) 
+0

ありがとうございました。$ this-> day_pcreと$ this-> month_pcre変数には、それぞれの言語の可能な日と月のパターンが含まれていました。英語以外のすべての言語を削除し、エラーはなくなりました。 –