2010-12-21 59 views
1

我有大量的日誌數據,我需要從中獲取一些相關信息。 語法是:preg_match_all與周邊數據

WORD1 some text KEYWORD some text WORD2 WORD1 some text KEYWORD some text WORD2 WORD1 some text KEYWORD some text WORD2 WORD1 some text KEYWORD some text WORD2 

是否可以使用正則表達式來得到一定的塊出來的 - 所以,當我詢問了一些關鍵字,它將返回WORD1 some text THIS_KEYWORD some text WORD2

PS:可能有多個實例應該返回所有的塊(preg_match_all,PREG_SET_ORDER?)。

+0

將總是存在`WORD1`和`WORD2`如圖所示? – codaddict 2010-12-21 17:55:58

+0

是的,它基本上是一個系統日誌文件,有一定的詞開始和結束每個塊 – user323304 2010-12-21 17:57:14

回答

1

根據你的評論,每個塊總會有開始和結束詞。

你可以做到以下幾點:

  • 拆分輸入字符串成塊 (陣列)。該塊的結尾是 ,由之後的空格標識,然後是WORD2,之後是 WORD1
  • 在 關鍵字中搜索我們得到的數組。

$arr = preg_split('/(?<=WORD2)\s+(?=WORD1)/',$log); 
$keyword = 'KEYWORD1'; 
$result = preg_grep("/\b$keyword\b/",$arr); 

Ideone Link

+0

似乎工作,謝謝! – user323304 2010-12-21 18:09:15

0

使用UNGREEDY修改

$found = preg_match_all("/WORD1.*KEYWORD.*WORD2/U",$x,$match); 
if($found) print_r($match[0]);