2010-12-21 38 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]);