提取字符串周围的句子

时间:2014-02-26 14:32:21

标签: php regex

我一直在学习如何使用正则表达式,我认为开始在维基百科页面上搜索包含$ search的句子是个好主意。

到目前为止,我设法弄清楚得到的句子的一半,但我只是想知道如何只获得带有$ search的句子。

$content = $wdata->query->pages->$wpageid->extract; 
preg_match_all('/(?<=[.?!]|^).*?(?=([.?!])\s{0,3}[A-Z]|$)/s',$content,$matches);
echo "<pre>";
for($i=0;$i<count($matches[0]);$i++)
$result[] = trim($matches[0][$i]).$matches[1][$i];
print_r($result);

到目前为止,这就是我所拥有的,它可以很好地获取一系列句子,但并不是所有句子都与$ search字符相关,或者与$ search字符合适。

我想知道如何检查或只用$ search来获取句子。

在正则表达式('.$search.')中粘贴/(?<=[.?!]|^).*?(?=([.?!])\s{0,3}[A-Z]|$)/s应该很简单,但正如我所说,我是正则表达式的新手,我不知道在哪里放,也就是说那会有用。

非常感谢你们的任何帮助!

修改 此外,如果它不是太麻烦,维基百科部分保留,并且由于某种原因,一些线不是阵列的一部分(见照片)。 enter image description here

1 个答案:

答案 0 :(得分:1)

如果您已经有一个句子列表,请使用FOR循环仅过滤相关的句子,即stripos()函数。你真的不需要把你的$ search放在正则表达式中。

编辑,例如:

for($i=0;$i<count($matches[0]);$i++)
{
    $sentence = trim($matches[0][$i]).$matches[1][$i];

    if (stripos($sentence, $search) !== false)
        $result[] = $sentence;
}