2010-07-22 9 views
0

Ok que j'ai un paragraphe de texte:php trouver extrait du contenu de preg_match

Après avoir obtenu coupé pour la première et la dernière fois dans sa vie, Durant a regardé du canapé comme l'équipe américaine valsé dans le match pour la médaille d'or et puis a été testé par l'Espagne, en fin de compte émergents avec une victoire 118-107 qui mis fin à une sécheresse médaille d'or de huit ans pour l'équipe nationale masculine senior des États-Unis. Mais la sécheresse médaille d'or pour les Américains dans le Championnat du Monde FIBA ​​ reste intacte, maintenant à 16 ans et compter que Team USA se prépare à se diriger vers la Turquie sans des membres du soi-disant Encaisser équipe de Beijing.

Ce que je voudrais faire est d'exécuter php preg_match_all quelques mots-clés (disons par exemple « équipe » et « pour ») sur le texte, puis récupérer un extrait (peut-être 10 mots avant et 10 mots après) pour chacun des résultats trouvés.

Quelqu'un a une idée de comment cela peut-il être fait?

Répondre

0

Cocher cette http://www.php.net/manual/en/regexp.reference.squarebrackets.php

C'est donc un mot avec un séparateur:

([:word:].*[:punct:]) 

Ce sont dix mots avec septembre

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

Quelque chose comme ça serait proche de votre solution:

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

600 caractères ne suffisent pas à décrire tous les problèmes avec cette réponse. S'il vous plaît, il suffit de le supprimer. –

2

Vous pouvez le faire:

  • obtenir une liste de tous les mots et leurs compensations à l'aide preg_match_all avec PREG_OFFSET_CAPTURE drapeau.
  • Itérez les mots et trouvez le terme recherché.
  • Obtenez le x avant et après le match.

Voici un exemple:

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).' … '; 
    } 
} 
0

Somthing comme celui-ci fera l'affaire ayant à l'esprit que les mots que vous recherchez devrait être à environ 4 mots atleast la distance ou il ne sera pas correspondre .. vous pouvez changer cela et ajuster.De cette façon, vous pouvez ajuster l'importance de la relation entre les mots-clés

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