RegEx获取前后N个单词

时间:2013-03-19 10:21:40

标签: php regex grep preg-match

我想获得给定搜索字符串的“上下文”。例如,对于以下行中的搜索字符串myself

  

我,我和我的狗正在度假。

我希望得到dog and myself are going N = 2。所以比赛前有2个单词,之后有2个单词。


目前我匹配这样的整行:

$lines = file($file->getFilename());
$lines = preg_grep('/'.$_POST['query'].'/', $lines);

1 个答案:

答案 0 :(得分:6)

preg_grep()应该是这样的,但听起来你需要preg_match(),以防万一你可以在文本中有多个搜索过的单词实例,并希望找到所有这些preg_match_all() http://regex101.com/r/pB3eW0 3}}

您正在寻找的RegEx是:(?:[^ ]+ ){0,2}myself(?: [^ ]+){0,2} 在此解释演示:{{3}}

我将它设计为在之前和之后匹配2个单词,如果它可以,否则为1个单词,甚至没有单词。

允许变量 N 的代码可能如下所示:

$fileData=file_get_contents($file->getFilename());
$n=2;
$query='myself';
preg_match_all('/(?:[^ ]+ ){0,'.$n.'}'.$query.'(?: [^ ]+){0,'.$n.'}/i',$fileData,$matches);
print_r($matches);

请记住验证并转义用户输入,而不是仅仅在给定的函数中使用它!