[英]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.