preg_match_all包含周围数据

时间:2010-12-21 17:51:48

标签: php regex

我需要大量的日志数据才能从中获取相关信息。 语法是:

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?)。

2 个答案:

答案 0 :(得分:1)

根据你的评论,每个区块总会有开始和结束的单词。

您可以执行以下操作:

  • 将输入字符串拆分为块 (阵列)。块的一端是 由空白识别的 然后是WORD2,之后是。{ WORD1
  • 搜索我们上面获得的数组 关键字。

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

Ideone Link

答案 1 :(得分:0)

使用UNGREEDY修饰符

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