5

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

我,我的狗和我自己要去度假。

我想得到dog and myself are goingN = 2。所以比赛前2个词和比赛后2个词。


目前我匹配这样的整行:

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

1 回答 1

9

preg_grep()应该是这样的,但听起来你需要preg_match()并且如果你可以在文本中有多个搜索词实例并且想要找到所有这些实例preg_match_all()

您正在寻找的正则表达式是:(?:[^ ]+ ){0,2}myself(?: [^ ]+){0,2} 这里解释的演示:http ://regex101.com/r/pB3eW0

我将它设计为匹配前后 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);

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

于 2013-03-23T11:06:47.950 回答