2

我正在尝试分解带有体育成绩的 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,所以我一直在尝试找出最佳的正则表达式,以正确的格式将其拆分。

有没有人有任何想法?

更新

我实际使用它的代码,我今天正在提取美国职业棒球大联盟游戏的 xml,只过滤掉标记为最终意味着最终得分的游戏,然后我试图从那里进一步分解它..

<?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/>";
 }
 }







?>
4

4 回答 4

1

您可以根据一系列数字拆分字符串,假设团队名称也不包含数字:)

$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');
于 2013-05-03T06:35:43.543 回答
0

这可能正是您想要的:

<?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);
 ?>

现场演示在这里>>

于 2013-05-03T06:24:27.393 回答
0

也许

<?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
}

?>

第一场比赛是主队。第 2 场比赛是主场比分。第3场是客队。第4场是客场比分

于 2013-05-03T06:29:12.550 回答
0
$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);
于 2013-05-03T06:34:12.897 回答