php弃用功能删除和重新安置问题

时间:2011-01-21 11:15:32

标签: php regex posix pcre deprecated

我正在尝试用新推荐的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并针对相同的模式对其进行测试时,不会返回任何匹配项。我无法弄清楚为什么?我必须在这里遗漏一些东西。请你帮我解决这个问题。

2 个答案:

答案 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);