php устарела функция удаления и проблемы с заменой - PullRequest
1 голос
/ 21 января 2011

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

Ответы [ 2 ]

5 голосов
/ 21 января 2011

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

preg_match('/(TIME)(.*)(ORIGINAL_REQUEST:)/is', $strXml, $match);
1 голос
/ 21 января 2011

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

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

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