改进preg_match

时间:2011-08-17 14:04:42

标签: php 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,

4 个答案:

答案 0 :(得分:1)

使用

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

它使用负前瞻来确保字符串后面没有这些字。 此外,它不会在结果中包含短划线(-)。

答案 1 :(得分:0)

在正则表达式中难以匹配特定单词。您需要做的是之后过滤结果。

答案 2 :(得分: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); 

答案 3 :(得分:-1)

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

这是你的模式