2011-08-17 3 views
0

Je les chaînes suivantesAméliorer la preg_match

Football-Europ, 
Football-North 
Ice_hockey-NHL 
Tennis-xxx 

Je suis en utilisant preg_match le type de sport et prendre encore pas ...

$sports = "(football|ice_hockey|basketball|tennis|handball|soccer)" 
preg_match($rSports,strtolower($link[1]), $sportType); 

Mais je ne ai pas besoin que les chaînes qui incluent les mots Live et American, comment dois-je modifier le preg_match?

Football-Amreican, 
Football-Live, 
Tennis-Live, 
+0

utilisation regard négatif affirmation à l'avance pour les mots que vous ne veut pas '$ sports =" (football | ice_hockey | basketball | tennis | handball | football) - (?! american | live | nhl) "' où dash - est juste ajouté en regardant vos exemples –

Répondre

1

Utilisez

"(football|ice_hockey|basketball|tennis|handball|soccer)(?!-(?:Live|American))" 

Il utilise un négatif pour préanalyse faire en sorte que les chaînes ne sont pas suivies par ces mots. En outre, il n'inclut pas le tiret (-) dans le résultat.

0

Ne pas correspondre à un mot spécifique est difficile dans l'expression rationnelle. ce que vous devez faire est de filtrer les résultats après.

-1
(^[A-Za-z_]{0,})- 

ceci est votre modèle

0

Je pense que vous cherchez peut-être preg_match_all et « aucun cas » interrupteur (i):

<?php 

$rSports =<<<EOF 
Football-Europ, 
Football-North, 
Ice_hockey-NHL, 
Tennis-xxx 
EOF; 

$rSports = trim ($rSports); 

# uncomment to use $sports = "#((football|ice_hockey|basketball|tennis|handball|soccer).*)#i"; // gets you "Football-Europ" etc 
$sports = "#(football|ice_hockey|basketball|tennis|handball|soccer)#i"; // gets you "Football" 
preg_match_all($sports, $rSports, $sportType); 

print_r($sportType);