0

PHP 5.3 の使用 - ereg() 非推奨...

この関数を (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;
}
4

3 に答える 3

0

ereg の最初のパラメータは正規表現です。つまり、.*pointer何にでも一致し ( .*)、次に「ポインタ」という単語( ) に一致しpointer、次に式の残りの部分に一致します。

于 2011-05-05T10:37:11.907 に答える
0

あまり関係ありません。正規表現文字列の最初と最後にマーカー文字を追加するだけです。

通常、マーカー文字はスラッシュ ( )ですが、文字列の最初と最後で同じ文字である限り、他の文字にする/こともできます (チルダは非常に一般的に使用され、ここではうまく機能します)。 ~t が文字列内に表示されます (その場合はバックスラッシュでエスケープする必要があります)。

したがって、コードは次のようになります。

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

正規表現マーカー文字としてスラッシュを使用する場合、スラッシュは PHP 文字列のエスケープ文字でもあるため、二重にする必要があることに注意してください。

実際の表現を説明すると:

.*- これは、文字列の先頭にある任意の文字の任意の数です (実際には、この式からこれを除外できます。マッチングには影響しません)

pointer- これは、一致する文字列内の実際の単語 'pointer' を探しています。

([A-Za-z0-9.-]+)- 英数字、ドット、またはハイフンの 1 つ以上の文字を探します。さらに、これらは括弧で囲まれているため、「一致するグループ」になります。これは、検索のこの部分の結果が$regs[1].

\..*- 任意の数の任意の文字が続くドット文字を探します。試合開始時と同様.*に、マッチングに影響しないのでドロップしても構いません。

したがって、式全体は次のような文字列を探しています。

blahblahblahpointer blah123-.blah.blahblahblah

そこから、あなたはblah123-.blah入ります$regs[1]

于 2011-05-05T10:37:52.990 に答える
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;
}
于 2011-05-05T10:37:57.040 に答える