将弃用的eregi / ereg / ereg_replace转换为preg_match或其他等效项

时间:2012-06-07 12:39:06

标签: php preg-match eregi ereg

今天,我在新域和新托管服务提供商上发布了一个网站,但在代码的某些行上获得了折旧警告。我不擅长preg的东西,但也许有人可以帮助我将它转换为等效的preg_match代码?

这里有一些代码行:

/* 1 */
$b = ( eregi( "^https?://(.*).$sDomainName/", $q ) ||  eregi( "^https?://$sDomainName/", $q ));

/* 2 */
function suIsValidEmail( $s ) 
{ return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $s); }

/* 3 */
if( !eregi( '^https?://*/', $aa['src'] ))

/* 4 */
 $sText = ereg_replace('[^A-Za-z0-9 &;'.suMakeString( $asInclNonNumChars ).']', ' ', strip_tags( $s ));

/* 5 */
function suPlainTextLinksToHtml( &$s )
{ // convert all links to html links 
  $s = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $s ); 
}

/* 6 */
function suPlainTextEmailToHtml( &$s )
{    
  // Convert all email to links:
  $s = ereg_replace('[-a-z0-9!#$%&.\'*+/=?^_`{|}~]+@([.]?[a-zA-Z0-9_/-])*', '<a href="mailto:\\0">\\0</a>', $s );
}

/* 7 */
if( $s === $sReferer || eregi( "^https?://$s/", $sReferer ) )
 { return true; }

/* 8 */
function suWildCardToRegExpression( $str )
{
  $s = ''; 
  for ($i = 0; $i < strlen($str); $i++)
  {
   $c = $str{$i};
   if ($c =='?')
   $s .= '.'; // any character
   else if ($c == '*')   
   $s .= '.*'; // 0 || more any characters   
   else if ($c == '[' || $c == ']')
   $s .= $c;  // one of characters within []
   else
   $s .= '\\' . $c;
  }

  $s = '^' . $s . '$';

  //trim redundant ^ || $
  //eg ^.*\.txt$ matches exactly the same as \.txt$
  if (substr($s,0,3) == '^.*')
   $s = substr($s,3);
  if (substr($s,-3,3) == '.*$')
   $s = substr($s,0,-3);
  return $s;
}

function suIsFileNameMatch( $asFileMask, $sFileName )
{
  if( !is_array( $asFileMask ))
  { if( is_string( $asFileMask ))
      { $asFileMask = explode( ';', $asFileMask ); }
     else { $asFileMask = (array)$asFileMask; }
  } 

  if( suIsValidArray( $asFileMask ))
  {
    foreach( $asFileMask as $sFileMask )
    {
      $bResult = ereg( suWildCardToRegExpression( (string)$sFileMask ), $sFileName );
      if( $bResult )
       { return true; }
    }
  }

  return false;
}   

注意:我不是一个懒惰的人,但我根本不知道该怎么做!

1 个答案:

答案 0 :(得分:2)

小指南:

  • preg中,您需要使用分隔符来包围表达式;标准版本为/,但也可以是其他版本(特别是如果您匹配网址),例如@~。例如,preg_match('#^https?://#i')eregi('^https?://')相同。

  • eregi可以通过附加pattern modifier i进行转换,就像上面的示例一样。

  • ereg_replace转换为preg_replaceeregi_replace也是如此(但请记住添加i修饰符)。

  • 使用preg_quote可以在表达式中转义变量。

不确定是否涵盖所有内容,但我欢迎其他人加入。

另请参阅:http://docstore.mik.ua/orelly/webprog/pcook/ch13_02.htm