我想获得给定搜索字符串的“上下文”。例如,对于以下行中的搜索字符串myself
我,我和我的狗正在度假。
我希望得到dog and myself are going
N = 2。所以比赛前有2个单词,之后有2个单词。
目前我匹配这样的整行:
$lines = file($file->getFilename());
$lines = preg_grep('/'.$_POST['query'].'/', $lines);
答案 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);
请记住验证并转义用户输入,而不是仅仅在给定的函数中使用它!