2011-01-21 59 views
1

我想用新推薦的代碼替換我的PHP源代碼中不推薦使用的函數。但是,我在使用php手冊中提到的正則表達式模式中的「i」替換帶有preg_match函數的eregi函數時遇到了很大的問題。以下是示例代碼: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

.將不匹配換行符。此外,使用s修飾符(稱爲PCRE_DOTALL):

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

eregi() function使得區分* *敏感的搜索。您必須使用PCRE i modifier才能達到相同的結果。

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

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

他已經在使用'i'。 –

+0

我看到我之前沒有使用「s」修飾符。當我在Crozin的例子中使用「s」修飾符時,它工作得很好。非常感謝。 – Kartins

相關問題