簡體   English   中英

正則表達式以匹配IP地址

[英]Regular expression to match IP addresses

我有file.txt包含這些數據:

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)

我想提取pc39.home的IP。 我使用過這個正則表達式但不起作用:

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

結果應該是192.168.1.15

您可以使用

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

請參閱正則表達式演示

我添加了一個\\(以匹配文字(和周圍使用的捕獲組[\\d.]+ (1個或多個數字或點 )的是,可以使用被檢索的IP相匹配[1]指數$matches 。所述~m啟用多行模式,以便^可以匹配行的開頭,而不僅僅是字符串start。

UPDATE

如果你需要創建一個帶有文字字符串的動態正則表達式,你應該考慮使用preg_quote

$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]);
}

你還需要' \\(([\\d.]+)\\)/'的單引號文字,因為\\必須是文字\\符號(是的,PHP將\\解析\\作為文字\\具有不存在的轉義序列,但為什么把它放到PHP?)。

解決方案是:

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

如果您想要捕獲任何其他IP,您可以更改$ search。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM