我正试图用体育成绩分解rss提要
示例数据
San Diego 4 Chicago Cubs 2
Miami 2 Philadelphia 7
Boston 3 Toronto 1
Washington 3 Atlanta 1
Chicago Sox 3 Texas 1
St. Louis 6 Milwaukee 5
rss基本上给了我一个像San Diego 4 Chicago Cubs 2
这样流动的字符串,我正试图将其分解以更好地使用。
基本上,我试图首先将San Diego 4 Chicago Cubs 2
划分为四个变量,$home_team
、$home_score
、$away_team
、$away_score
。
但是,很明显,主队可以是一个单词或多个单词,分数可以是1位数或最多3位数,所以我一直在努力找出最好的正则表达式,以正确的格式将其分解。
有人有什么想法吗?
更新
我实际使用它的代码,我今天提取了mlb游戏的xml,只过滤出标记为Final的游戏,意思是Final Score,然后我试图从那里进一步分解它。。
<?php
$xml = simplexml_load_file("http://feeds.feedburner.com/mpiii/mlb?format=xml");
foreach($xml->channel->item as $item){
if(preg_match('/(FINAL)/', $item->title, $matches) || preg_match('/(POSTPONED)/', $item->title, $matches)){
if(preg_match('/(POSTPONED)/', $item->title, $matches)){
continue;
}
$string = $item->title;
$patterns = array();
$patterns[0] = '/''(FINAL'')/';
$patterns[1] = '/''(POSTPONED'')/';
$replacements = array();
$replacements[1] = '';
$replacements[0] = '';
$string = preg_replace($patterns, $replacements, $string);
$keywords = preg_match("^(.*?) ([0-9]{1,3}) (.*?) ([0-9]{1,3})$", $string);
echo $keywords[1]."<br/>";
}
}
?>
您可以根据数字序列拆分字符串,假设团队名称也不包含数字:(
$s = 'San Diego 4 Chicago Cubs 2';
list($home_team, $home_score, $away_team, $away_score) = array_filter(
array_map('trim',
preg_split('/'b('d+)'b/', $s, -1, PREG_SPLIT_DELIM_CAPTURE)
), 'strlen');
$arr = array("San Diego 4 Chicago Cubs 2",
"Miami 2 Philadelphia 7",
"Boston 3 Toronto 1",
"Washington 3 Atlanta 1",
"Chicago Sox 3 Texas 1",
"St. Louis 6 Milwaukee 5"
);
$results = array();
foreach ($arr as $v) {
$scores = preg_split("/[A-Za-z's'.]+/", $v);
$teams = preg_split("/['d]+/", $v);
$results[] = "Home: ".$teams[0]." (".$scores[1]."), Away: ".$teams[1]." (".$scores[2].")"; }
foreach ($results as $v) {
echo $v."<br>"; }
结果:
主场:圣地亚哥(4(,客场:芝加哥小熊队(2(
主场:迈阿密(2(,客场:费城(7(
主场:波士顿(3(,客场:多伦多(1(
主场:华盛顿(3(,客场:亚特兰大(1(
主场:芝加哥袜队(3(,客场:德克萨斯队(1(
主场:圣路易斯(6(,客场:密尔沃基(5(
很明显,你可以随心所欲地构建$results
;但解决方案的核心是正则表达式:
$scores = preg_split("/[A-Za-z's'.]+/", $v);
$teams = preg_split("/['d]+/", $v);
也许
<?php
$rssLine="San Diego 4 Chicago Cubs 2";
//add code to loop though lines
if(preg_match ("/^(.*?) ([0-9]{1,3}) (.*?) ([0-9]{1,3})$/" ,$rssLine, $matches) ===1){
$home_team = $matches[1];
$home_score = $matches[2];
$away_team = $matches[3];
$away_score = $matches[4];
}
else{
//log no match found
}
?>
第一场比赛是主队。第二场比赛是主场比分。第三场比赛是客场比赛。第四场比赛客场得分
这可能正是您想要的:
<?php
$your_input_string ="San Diego 4 Chicago Cubs 2 Miami 2 Philadelphia 7 Boston 3 Toronto 1 Washington 3 Atlanta 1 Chicago Sox 3 Texas 1 St. Louis 6 Milwaukee 5 ";
$your_result = array_chunk(array_filter( array_map('trim', preg_split('/'b('d+)'b/', $your_input_string, -1, PREG_SPLIT_DELIM_CAPTURE)), 'strlen'),4);
echo '<pre>';
print_r($your_result);
?>
现场演示>>