2011-08-17 47 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);