我正在尝试用新推荐的PHP源代码替换已弃用的函数。但是我在使用preg_match函数替换eregi函数时遇到了一个大问题,正如php手册中建议的那样,正则表达式中的“i”。以下是示例代码:
<?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并针对相同的模式对其进行测试时,不会返回任何匹配项。我无法弄清楚为什么?我必须在这里遗漏一些东西。请你帮我解决这个问题。
答案 0 :(得分:5)
点.
与新线不匹配。另外,使用s
修饰符(称为PCRE_DOTALL
):
preg_match('/(TIME)(.*)(ORIGINAL_REQUEST:)/is', $strXml, $match);
答案 1 :(得分:1)
eregi() function
在 *敏感搜索中显示案例 - * 。您必须使用PCRE i
modifier来获得相同的结果。
eregi("(TIME)(.*)(ORIGINAL REQUEST:)" , $strXml, $matches)
preg_match('/(TIME)(.*)(ORIGINAL REQUEST\:)/si', $strXml, $matches);