2013-03-19 78 views
3

我想获取给定搜索字符串的“上下文”。例如,搜索字符串myself在以下行RegExp获取前后的N个字

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

我想得到dog and myself are going N = 2。所以比赛前2个字和2个后。


目前我匹配整行是这样的:

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

文件内容和搜索字符串有多复杂? – Passerby 2013-03-19 10:39:27

+0

你如何定义一个“单词”?只有英文字母或其他语言?你允许数字吗?标点符号怎么样?或者您是否将其定义为非空间序列? – nhahtdh 2013-03-19 10:45:16

+0

让我们假设文件内容是由“单词”组成的 - 由空格分隔的字符串。 – 2013-03-19 10:46:50

回答

5

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); 

记住验证和逃避用户输入,而不只是使用它的函数给出!

+0

完美的,与链接的资源很好的解释。 +1! – 2013-03-23 14:00:33

+0

感谢您的回答,并向regex101.com介绍其非常酷。 – codisfy 2014-11-24 18:04:00