php从preg_match中查找内容片段

php从preg_match中查找内容片段,php,regex,Php,Regex,好吧,假设我有一段文字: 在第一次和第二次受伤后 杜兰特有生以来最后一次看电视 美国队的沙发上 跳着华尔兹进入了金牌比赛 最终,西班牙进行了测试 以118比107获胜 结束了八年的金牌荒 美国男子国家队高级组 团队但金牌却因干旱而失去 FIBA世界中的美国人 冠军保持不变,现在16岁 年,作为美国队参加 准备不带任何武器前往土耳其 所谓救赎的成员 北京队 我想做的是运行一个phppreg\u match\u all几个关键字(例如 “team”和“for”),然后为找到的每个结果检索一个片段(可

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

在第一次和第二次受伤后 杜兰特有生以来最后一次看电视 美国队的沙发上 跳着华尔兹进入了金牌比赛 最终,西班牙进行了测试 以118比107获胜 结束了八年的金牌荒 美国男子国家队高级组 团队但金牌却因干旱而失去 FIBA世界中的美国人 冠军保持不变,现在16岁 年,作为美国队参加 准备不带任何武器前往土耳其 所谓救赎的成员 北京队

我想做的是运行一个phppreg\u match\u all几个关键字(例如 “team”和“for”),然后为找到的每个结果检索一个片段(可能前后各10个单词)

有人知道怎么做吗?

检查这个

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

([:word:].*[:punct:])
这是十个单词和sep

([:word:].*[:punct:]){10}
类似于此的内容将接近您的解决方案:

([:word:].*[:punct:].){10}team([:punct:].[:word:].*){10}

您可能会在Drupal搜索练习生成器中找到许多有趣的想法

这是一个UTF8安全,并涵盖了各种边缘情况

您可以这样做:

  • 使用带有preg\u OFFSET\u CAPTURE标志的
    preg\u match\u all
    获取所有单词及其偏移量的列表
  • 迭代单词并找到搜索词
  • 在比赛前后获得x字
下面是一个例子:

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).' … ';
    }
}
preg_match_all('/[\w-]+/u',$str,$matches,preg_OFFSET_CAPTURE);
$term=‘团队’;
$span=3;

对于($i=0,$n=count($matches[0]);$i这样的事情会起作用,记住你搜索的单词至少应该在4个单词的距离上,否则它将不匹配。你可以更改并调整。这样你可以调整关键字之间关系的重要性

preg_match_all("~([\w]+[\s\- ,]+){0,3}watched([\s\- ,]+[\w]+){0,4}\ssofa([\s\- ,]+[\w]+){0,3}~i", $text, $matches);

600个字符不足以描述此答案的所有问题。请删除它。