2016-05-18 9 views
1

I file.txt haben, die diese Daten enthält:Regulärer Ausdruck IP-Adressen entsprechen

livebox.home (192.168.1.1) 
set-top-box41.home (192.168.1.10) 
pc38.home (192.168.1.11) 
pc43.home (192.168.1.12) 
pc39.home (192.168.1.15) 

Ich möchte die IP von pc39.home extrahieren. Ich habe diesen regulären Ausdruck verwendet, aber es funktioniert nicht:

preg_grep("#^[a-z]{2}39.[a-z]{4} \d{3}\.\d{3}\.\d{1}\.\d{2}#",$myfile); 

Das Ergebnis sollte 192.168.1.15 sein.

Antwort

0

mit diesem können Sie nur die $ Suche ändern, wenn Sie eine der anderen IPs caputure wollen.

$search = "pc39\.home"; 
preg_match("/" . $search ." \(([\d.]+)\)/", $myfile, $out); 
+0

Danke für Ihre Antwort –

2

Sie können

preg_match('~^[a-z]{2}39\.[a-z]{4} \(([\d.]+)~m', $myfile_contents, $matches); 
print_r($matches[1]); 

Siehe regex demo

Ich habe eine \( eine wörtliche ( anzupassen und verwendet, um eine Erfassungsgruppe um [\d.]+ (1 oder mehr Stellen oder Punkte), das entspricht der IP, die unter Verwendung von [1] Index in $matches abgerufen werden kann. Die ermöglicht einen mehrzeiligen Modus, so dass ^ den Anfang einer Zeile, nicht nur den Beginn der Zeichenfolge übereinstimmen konnte.

UPDATE

Wenn Sie in eine dynamische regex mit einer Zeichenkette erstellen benötigen, können Sie über die Verwendung von preg_quote denken sollte:

$myfile = file('file.txt'); 
$search = "pc39.home";   // <= a literal string, no pattern 
foreach ($myfile as $lineContent) 
{ 
    $lines=preg_match('/' . preg_quote($search, "/") . ' \(([\d.]+)\)/', $lineContent, $out); 
    echo($out[1]); 
} 

Sie müssen auch eine einzelne wörtliche zitiert in ' \(([\d.]+)\)/' seit die \ muss Literal sein \ Symbole (ja, PHP löst \ als Literal \ mit nicht vorhandenen Escape-Sequenzen, aber warum in PHP?).

+0

danke Ihnen für Ihre Antwort –

1

die Lösung ist:

$myfile = file('file.txt'); 
      $search = "pc39\.home"; 
      foreach ($myfile as $lineContent) 
      { 
       $lines=preg_match("/" . $search ." \(([\d.]+)\)/", $lineContent, $out); 
       echo($out[1]); 
      } 
+1

Wenn Sie eine Variable als Literal in einem regulären Ausdruck verwenden möchten, können Sie einfach 'verwenden preg_quote' . –