我想获取给定搜索字符串的“上下文”。例如,搜索字符串myself
在以下行RegExp获取前后的N个字
我,我的狗和我自己正在度假。
我想得到dog and myself are going
N = 2。所以比赛前2个字和2个后。
目前我匹配整行是这样的:
$lines = file($file->getFilename());
$lines = preg_grep('/'.$_POST['query'].'/', $lines);
我想获取给定搜索字符串的“上下文”。例如,搜索字符串myself
在以下行RegExp获取前后的N个字
我,我的狗和我自己正在度假。
我想得到dog and myself are going
N = 2。所以比赛前2个字和2个后。
目前我匹配整行是这样的:
$lines = file($file->getFilename());
$lines = preg_grep('/'.$_POST['query'].'/', $lines);
preg_grep()应该像这一点,但它听起来像是你将需要preg_match()和情况下,你可以在搜索词的多个实例文本,并希望找到所有这些preg_match_all()
你要找的正则表达式是:(?:[^ ]+){0,2}myself(?: [^ ]+){0,2}
解释演示在这里:http://regex101.com/r/pB3eW0
我设计它匹配之前和之后的两个词,如果它可以否则1个词甚至没有。
的代码允许可变ň看起来是这样的:
$fileData=file_get_contents($file->getFilename());
$n=2;
$query='myself';
preg_match_all('/(?:[^ ]+){0,'.$n.'}'.$query.'(?: [^ ]+){0,'.$n.'}/i',$fileData,$matches);
print_r($matches);
记住验证和逃避用户输入,而不只是使用它的函数给出!
完美的,与链接的资源很好的解释。 +1! – 2013-03-23 14:00:33
感谢您的回答,并向regex101.com介绍其非常酷。 – codisfy 2014-11-24 18:04:00
文件内容和搜索字符串有多复杂? – Passerby 2013-03-19 10:39:27
你如何定义一个“单词”?只有英文字母或其他语言?你允许数字吗?标点符号怎么样?或者您是否将其定义为非空间序列? – nhahtdh 2013-03-19 10:45:16
让我们假设文件内容是由“单词”组成的 - 由空格分隔的字符串。 – 2013-03-19 10:46:50