2010-12-22 4 views
3

J'ai un motif regex qui recherche des mots dans un fichier texte. Comment ignorer les doublons?Ignorer les doublons dans le modèle regex

Par exemple, jetez un oeil à ce code

$pattern = '/(lorem|ipsum|daboom|pahwal|ababaga)/i'; 
$num_found = preg_match_all($pattern, $string, $matches); 

echo "$num_found match(es) found!"; 
echo "Matched words: " . implode(',', $matches[0]); 

Si j'ai plus d'un dire lorem dans l'article, la sortie sera quelque chose comme ça

5 matches found! 
Matched words: daboom,lorem,lorem,lorem,lorem 

Je veux le motif pour trouver uniquement la première occurrence, et ignorer le reste, donc la sortie doit être:

2 matches found! 
Matched words: daboom,lorem 

Répondre

6

Effectuez un array_unique sur $matches[0]. Et peut-être un array_map avec strtolower si vous voulez que l'unique soit insensible à la casse.

$pattern = '/(lorem|ipsum|daboom|pahwal|ababaga)/i'; 
preg_match_all($pattern, $string, $matches); 
$matches = $matches[0]?array_unique(array_map('strtolower', $matches[0])):array(); 

echo count($matches)." match(es) found!"; 
echo "Matched words: " . implode(',', $matches); 
+0

* slaps front * Pourquoi n'y ai-je pas pensé? – HyderA