首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从preg_match中查找内容片段

从preg_match中查找内容片段
EN

Stack Overflow用户
提问于 2010-07-22 07:06:18
回答 4查看 497关注 0票数 0

好吧,假设我有一段文字:

在他一生中第一次也是最后一次被淘汰后,杜兰特从沙发上看着美国队跳着华尔兹进入金牌比赛,然后接受了西班牙的考验,最终以118-107的胜利结束了美国男子国家队八年来的金牌荒。但是美国在国际篮联世锦赛上的金牌荒依然完整,现在已经16年了,美国队准备前往土耳其,而没有任何来自北京的救援队成员。

我想要做的是在文本上运行一个php preg_match_all几个关键字(例如'team‘和' for '),然后检索每个结果的片段(可能之前10个单词,后面10个单词)。

有人知道怎么做吗?

EN

回答 4

Stack Overflow用户

发布于 2010-07-22 07:28:57

你可以这样做:

  • 使用带有PREG_OFFSET_CAPTURE标志的preg_match_all获取所有单词及其偏移的列表。
  • 迭代这些单词并找到搜索项。
  • 在比赛前后得到x字。

下面是一个例子:

代码语言:javascript
复制
preg_match_all('/[\w-]+/u', $str, $matches, PREG_OFFSET_CAPTURE);
$term = 'team';
$span = 3;
for ($i=0, $n=count($matches[0]); $i<$n; ++$i) {
    $match = $matches[0][$i];
    if (strcasecmp($term, $match[0]) === 0) {
        $start = $matches[0][max(0, $i-$span)][1];
        $end = $matches[0][min($n-1, $i+$span+1)][1];
        echo ' … '.substr($str, $start, $end-$start).' … ';
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-07-22 07:14:24

检查这个http://www.php.net/manual/en/regexp.reference.squarebrackets.php

这是一个带有分隔符的词:

代码语言:javascript
复制
([:word:].*[:punct:])

这是九月的十个字。

代码语言:javascript
复制
([:word:].*[:punct:]){10}

像这样的东西很接近你的解决方案:

代码语言:javascript
复制
([:word:].*[:punct:].){10}team([:punct:].[:word:].*){10}
票数 0
EN

Stack Overflow用户

发布于 2010-07-22 07:23:53

您可能会在Drupal搜索费力构建器中找到许多有趣的想法。

http://api.drupal.org/api/function/search_excerpt/6

这是一个UTF8 8-安全,并有各种边缘-案件涵盖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3306513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档