2016-08-02 137 views
0

我試圖從一行中解析ip,它位於我知道的特定單詞的上面兩行,可以有人給出一個想法如何做到這一點? 這是我的代碼的一部分...用php讀取txt文件

if (($handle = fopen('FW1-20160802_1530.conf', "r")) !== FALSE){ 
while (($data = fgetcsv($handle, 1000,";")) !== FALSE) 
.. 
else if (preg_match('/(.*site-5552)/',$data[0],$match)) 
      { 
       list(,$line)=$match; 
       $REV_ARRAY[$site_name]['line']=$line;   
      } 

這給了我下面的輸出的第三行:

edit 2 
     set dst 10.23.255.252 255.255.255.252 
     set device "abc" 
     set comment "Static Route site-5552" 

但正如我上面提到的,我需要趕上IP:「10.23。 255.252「,它存在兩條線上。

該文本文件太大,所以我只粘貼了一部分。 根據現場數(在本例 - 5552),我需要找到相關的IP(10.93.255.252)

edit "Site-5552" 
    set asdaa 
    set asdsdaa 
    set aadsda 
    set aasdda 
    set aaaa 
    set adsaa 
    set aadsa 
    set vvxv 
    set dsds 
    set czx 

ssasd

edit 2 
     set dst 10.93.255.252 255.255.255.252 
     set device "sdasdsad" 
     set comment "Static Route for LTE site-5552" 
+0

我們不能沒有看到更多的代碼的告訴。話雖如此,我會猜測對你正在做的事情有一個更好的整體方法。 無論哪種方式,告訴我們這個例程更多 –

回答

1

KD你需要的s修飾符告訴正則表達式引擎

/(.*site-5552)/ 
:針對 .

匹配

從改變你的正則表達式時,包括新行字符

要:

/set dst ([\d\.]+).*site-5552/s 

Live demo

+0

我試過了,但它仍然不起作用... –

+0

@ K.D沒有更多的信息,我不能告訴你爲什麼它不起作用。我鏈接到的演示顯示,它應該與您提供的源文本和我使用的正則表達式模式 – BeetleJuice

+0

我已經添加了更多信息,我正在使用preg_match。當我嘗試使用$ match []時出現錯誤; –