php – 围绕给定单词(UTF-8)的N个字的优化正则表达式

我正在尝试找到一个优化的正则表达式来返回另一个的N个单词(如果可用)以构建摘要.字符串是UTF-8,因此“单词”的定义大于[a-z].用作参考词的字符串可以位于单词的中间,也可以不直接用空格包围.

我已经得到了以下有效但看起来实际上是贪婪和窒息时,在另一个周围寻找超过6-7个字:

/(?:[^\s\r\n]+[\s\r\n]+[^\s\r\n]*){0,4}lorem(?:[^\s\r\n]*[\s\r\n]+[^\s\r\n]+){0,4}/u

这是我为此而构建的PHP方法,但是我需要帮助让正则表达式变得不那么贪婪并且可以处理任意数量的单词.

/**
 * Finds N words around a specified word in a string.
 *
 * @param string $string The complete string to look in.
 * @param string $find The string to look for.
 * @param integer $before The number of words to look for before $find.
 * @param integer $after The number of words to look for after $find.
 * @return mixed False if $find was not found and all the words around otherwise.
 */
private function getWordsAround($string,$find,$before,$after)
{
    $matches = array();
    $find = preg_quote($find);
    $regex = '(?:[^\s\r\n]+[\s\r\n]+[^\s\r\n]*){0,' . (int)$before . '}' .
        $find . '(?:[^\s\r\n]*[\s\r\n]+[^\s\r\n]+){0,' . (int)$after . '}';
    if (preg_match("/$regex/u",$string,$matches)) {
        return $matches[0];
    } else {
        return false;
    }
}

如果我有以下$string:

"Lorem ipsum dolor sit amet,consectetur adipiscing elit. Cras auctor,felis non vehicula suscipit,enim quam adipiscing turpis,eget rutrum 
eros velit non enim. Sed commodo cursus vulputate. Aliquam id diam sed arcu 
fringilla venenatis. Cras vitae ante ut tellus malesuada convallis. Vivamus 
luctus ante vel ligula eleifend condimentum. Donec a vulputate velit. 
Suspendisse velit risus,volutpat at dapibus vitae,viverra vel nulla."

并称为getWordsAround($string,’vitae’,8,8)我想获得以下结果:

"Lorem ipsum dolor sit amet,"

感谢您的帮助正则表达式大师.

如何使用正则表达式或其他方法将输入文本拆分为单词数组.然后用循环查找目标单词.一旦找到,就抓住所需的阵列切片,将它们连接在一起并打印.

要保持单词之间的原始空格,可以将其包含在每个单词的末尾.

此外,这可以作为流解析器实现,而不是首先拆分整个字符串.

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...