RegExp获取前后N个单词

Pri*_*alj 4 php regex grep preg-match

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

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

我想得到dog and myself are goingN = 2.比赛前有2个单词,之后有2个单词.


目前我匹配这样的整行:

$lines = file($file->getFilename());
$lines = preg_grep('/'.$_POST['query'].'/', $lines);
Run Code Online (Sandbox Code Playgroud)

CSᵠ*_*CSᵠ 7

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

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

我设计它可以匹配前后两个单词,如果它可以 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);
Run Code Online (Sandbox Code Playgroud)

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