Проблемы с удалением и повторением устаревшей функции php

Я пытаюсь заменить устаревшие функции в исходном коде PHP новыми рекомендованными. Но у меня возникла большая проблема с заменой функции eregi на функцию preg_match с «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 используется для той же строки и проверяется по тому же шаблону, совпадения не возвращаются. Я не могу понять почему? Я должен что-то здесь упустить. Прошу вас помочь мне с этим.


person Kartins    schedule 21.01.2011    source источник


Ответы (2)


Точка . не соответствует новым строкам. Кроме того, используйте модификатор s (называемый PCRE_DOTALL):

preg_match('/(TIME)(.*)(ORIGINAL_REQUEST:)/is', $strXml, $match);
person Linus Kleen    schedule 21.01.2011

eregi() function делает регистр - * в * чувствительным поиск. Для достижения те же результаты.

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

preg_match('/(TIME)(.*)(ORIGINAL REQUEST\:)/si', $strXml, $matches);
person Crozin    schedule 21.01.2011
comment
Я вижу, что раньше модификатор s не использовался. Когда я использовал модификатор s, как в примере Крозина, он работал нормально. Большое спасибо. - person Kartins; 21.01.2011