2011-05-05 49 views
0

使用PHP 5.3将此转换弃用额日格() - 额日格()已过时...如何使用指针的preg_match()

我想转换此功能(的preg_match),但我不了解“指针”...

function gethostbyaddr_new($ip) 
{ 
    $output = `host -W 1 $ip`; 

    if (ereg('.*pointer ([A-Za-z0-9.-]+)\..*', $output, $regs)) 
    { 
     return $regs[1]; 
    } 

    return $ip; 
} 
+1

的http:// PHP。 net/gethostbyaddr? – KingCrunch 2011-05-05 10:42:15

回答

0

指针只是一些文字,当我运行host -W 1要匹配

我得到
4.4.8.8.in-addr.arpa domain name pointer google-public-dns-b.google.com.

所以,你可以使用:

function gethostbyaddr_new($ip) 
{ 
    $output = `host -W 1 $ip`; 

    if (preg_match('/.*pointer ([A-Za-z0-9.-]+)\..*/', $output, $regs)) 
    { 
     return $regs[1]; 
    } 

    return $ip; 
} 
0

ereg的第一个参数是正则表达式。所以,.*pointer匹配任何东西(.*),然后单词“指针”(pointer),然后剩下的表达式。

0

真的没什么。你需要做的就是在正则表达式字符串的开始和结尾添加一个标记字符。

通常,标记字符将是一个斜杠(/),但也可以是其他人(波浪~使用相当普遍,并会为你在这里工作好),只要它在开始和结束时的相同的字符字符串,并且不会出现在字符串中(如果需要,您需要使用反斜杠将其转义)。

所以,你的代码看起来是这样的:

preg_match('~.*pointer ([A-Za-z0-9.-]+)\..*~', $output, $regs) 

请注意,如果您使用斜线作为你的正则表达式标记性状,你将需要双击它,如斜线也是一个转义字符在PHP字符串。

在解释实际表现方面:

.* - 这是在字符串的开始任意数目的字符(你实际上可以离开这一关这个表达式,它不会影响匹配)

pointer - 这是寻找被匹配的字符串中的实际单词“指针”。

([A-Za-z0-9.-]+) - 查找字母数字或点或连字符的一个或多个字符。另外,因为这些被括在括号中,所以它们变成了“匹配组”,这意味着这部分搜索的结果以$regs[1]结束。

\..* - 寻找一个点字符,然后是任意数量的任何字符。与比赛开始时一样,.*可以被删除,因为它不会影响匹配。

所以整个表达式寻找它看起来像这样的字符串:

blahblahblahpointer blah123-.blah.blahblahblah 

,并从,你会得到$regs[1]blah123-.blah