2011-01-21 7 views
1

PHPのソースコードで推奨されなくなった関数を新しい推奨関数に置き換えようとしています。しかし、私はeregi関数をpreg_match関数で置き換えることに大きな問題を抱えていました。これは、PHPマニュアルで提案されている正規表現パターンの "i"で置き換えられました。PHPの廃止された関数の削除と置換の問題

<?php 

$strXml=<<<XMLSTRING 
    ALIPC231232 

    TIME 



    Jan 21 10:43:58 UTC 2011 



    ORIGINAL REQUEST: 

    TIME PLEASE 



XMLSTRING; 

eregi("(TIME)(.*)(ORIGINAL REQUEST:)" , $strXml, $matches); 
echo "begin_ck_eregi_match1:".$matches[1].":end_ck_eregi_match1"; 
echo "begin_ck_eregi_match2:".$matches[2].":end_ck_eregi_match2"; 

preg_match("/(TIME)(.*)(ORIGINAL REQUEST:)/i" , $strXml, $match); 
echo "begin_ck_preg_match_match1:".$match[1].":end_ck_preg_match_match1"; 
echo "begin_ck_preg_match_match2:".$match[2].":end_ck_preg_match_match2"; 

?> 

上記のコードでは、文字列がパターンに対してテストされたとき、eregiは適切に一致を返しました。同じ文字列に対してpreg_matchが使用され、同じパターンに対してテストされた場合、一致は返されません。なぜ私は理解できませんか?私はここで何かを逃していなければならないこれで私を助けてください。

答えて

5

ドット.は改行と一致しません。

preg_match('/(TIME)(.*)(ORIGINAL_REQUEST:)/is', $strXml, $match); 
1

eregi() function * で*敏感な検索大文字になり:また、(PCRE_DOTALLと呼ばれる)s修飾子を使用します。同じ結果を得るには、PCRE i modifierを使用する必要があります。

eregi("(TIME)(.*)(ORIGINAL REQUEST:)" , $strXml, $matches) 

preg_match('/(TIME)(.*)(ORIGINAL REQUEST\:)/si', $strXml, $matches); 
+1

彼はすでに「i」を使用しています。 –

+0

私は以前に "s"修飾語を使用していなかったことがわかりました。私がCrozinの例のように "s"修飾語を使用したとき、うまくいきました。どうもありがとう。 – Kartins

関連する問題