我有两种从RSS中提取的行。这些是正在玩的游戏和尚未开始的游戏。我下面的代码只会拉开已经开始的游戏。
$string = "Tampa Bay 6 Florida 5 (FINAL - OT)
Ottawa 0 Toronto 3 (FINAL)
NY Islanders at Ottawa (7:30 PM ET)
Toronto at Tampa Bay (7:30 PM ET)
San Jose at St. Louis (8:00 PM ET)
Detroit at Nashville (8:00 PM ET)
Vancouver at Chicago (8:30 PM ET)
Los Angeles at Edmonton (10:00 PM ET)";
preg_match_all("/^(\D+)(\d+ )(\D+)(\d+ )\s*\((.*)\)$/m", $string, $result);
echo "<pre>";
print_r($result);
重要的是团队对于两种类型的线路保持相同的阵列。我不知道该怎么做。有帮助吗?我敢肯定它只是一个我忘记的表达。
答案 0 :(得分:2)
呼。这就是我想出来的。它使用条件模式来匹配分数(如果有的话),如果没有找到分数,它会偷偷地“删除”'at'(表示它是一个未开始的匹配)。它将使用相同的技术来获得第二支球队的得分。最后它将匹配最后一个paranthesis组的内容。
被捕获的团体:
最后一次修复的内容
preg_match_all('#^([a-zA-Z] +)(?(?= \ d +)(\ d +)\ s + | \ s + at \ s +)([a-zA-Z] +) (?(?= \ d +)(\ d +))\ s +(([^]] +))#m',$ str,$ matches);
//注意编辑快乐的用户,正则表达式无法在SO上正确格式化。
唯一的问题是你应该修剪团队名称,因为其中可能不需要空格。