2011-08-17 52 views
0

我有以下字符串完善的preg_match

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

所以我使用的preg_match對這項運動的類型,並採取進一步的步驟...

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

但我並不需要那個字符串其中包括LiveAmerican的字樣,我該如何修改preg_match

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

使用負先行斷言的話,你不要''體育=「(足球|冰球|籃球|網球|手球|足球) - (?!美國|活| nhl)」'在哪裏短跑 - 只是通過看你的例子 –

回答

1

使用

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

它使用負先行,以確保該字符串不跟那些話。 此外,它不會在結果中包含短劃線(-)。

0

在正則表達式中,不匹配特定單詞很難。你需要做的是過濾結果。

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

這是你的模式

0

我想你可能會尋找preg_match_all和「任何情況下」開關(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);