在PHP

时间:2016-12-05 17:06:14

标签: php string split

$test_sample = "AFC Bournemouth4 - 3Liverpool
Halbzeit    0 - 2   

20'     0 - 1   Sadio Mane
(assist) Emre Can
22'     0 - 2   Divock Origi
(assist) Jordan Henderson
48' Jack Wilshere       

50' Simon Francis       

53'         Jordan Henderson
56' Callum Wilson   1 - 2   

64'     1 - 3   Emre Can
(assist) Sadio Mane
76' Ryan Fraser
Benik Afobe (assist)
2 - 3   

79' Steve Cook
Ryan Fraser (assist)
3 - 3   

87'         Emre Can
90' Nathan Ake  4 - 3";

所以,这是我想要在特定字符串中拆分的示例。每一行都标有时间戳。线条可以是目标(具有实际结果和辅助)或黄色/红色卡片。 我的第一个想法是通过时间戳preg_split字符串。虽然字符串中还有其他数字,但我认为这是使用“'”作为分隔符的最佳方法。但是因此我需要在分隔符前至少跳出一个字符才能在正确的位置分割,这是我的第一个问题:我不知道该怎么做。我的猜测是preg_split是在这里进行拆分的错误函数。

然后我尝试了一个更简单的分裂:

$test_strings = preg_split("/[']+/", $test_sample);

除了在错误的地方分配时间戳和文本的问题之外,我在这里遇到了第二个问题(这也是一个问题,即使我能够在正确的地方剪切字符串):

0 - 1   Sadio Mane (assist) Emre Can

很容易将这条线分成射手和他的助攻,但也有一些看起来像这样的线:

Steve Cook Ryan Fraser (assist)
史蒂夫库克是射手,瑞恩弗雷泽助攻。我不知道如何在没有错误的情况下拆分它。

我的目标是将示例分为1.时间戳,2。射手,3。辅助,另一方面分为1.时间戳和2.接收黄/红牌的玩家。该代码还应确定哪支球队进球或获得了一张牌。

如果有帮助,您可以在此处找到示例的来源: http://www.livefootball.com/football/2016-12-04/

我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

根据提供的网址和您问题的评论,我找到了一种查询livefootball.com数据的方法。代码通过curl发出POST请求,以模拟查询数据的浏览器 - 否则livefootball会阻止查询。获取页面的源代码后,我尝试查找分配给链接的任何信息,您必须单击这些信息才能显示匹配详细信息。此信息存储在相应链接的data-y参数中。我的下一步是为每个“密钥”进行webrequest以获取详细信息。完成此步骤后,您应该能够解析HTML表格以获取所需信息!

这是我的代码:

// maybe you have to change your URL dynamically for the acutal day...
$url = 'http://www.livefootball.com/football/2016-12-04/';
// the following 2 variables are used by curl
$header=array('POST HTTP/1.1');
$agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";

// query the url for the page content
$result = getPageContents($url, $header, $agent);
// prepare array for any found keys
$keys = array();
// now iterate through the result to find any "keys"
for($i = 0; $i < strlen($result); )
{
    // search for occurrence of " data-y"
    $i = strpos($result, ' data-y="', $i);
    // if no occurrence was found, strpos returns false, skip the loop
    if($i == false) break;
    // increase $i by the length of ' data-y="'
    $i += 9;
    // search for the closing quotationmark
    $endpos = strpos($result, '"', $i);
    // add the extracted key to your array
    $keys[] = substr($result, $i, $endpos-$i);
    // increase $i to search behind the last found key
    $i += $endpos-$i;
}

for($i = 0; $i < count($keys); $i++)
{
    // query livefootball for the detailed match information
    $result = getPageContents(getUrlFromId($keys[$i]), $header, $agent);

    // now $result contains an HTML-table containing the information you desire
    // HTML-parsing here...
}

// this function handles the POST-request via curl
// returns page content from $url
function getPageContents($url, $header, $agent)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);

    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);

    $result = curl_exec($ch);
    curl_close($ch);

    return $result;
}
// this function returns the URL which has to be queried for the detailed match information
function getUrlFromId($id)
{
    $id = str_replace("f", "", $id);
    return 'http://www.livefootball.com/eng/scores/soccer/id/' . $id . '/?fmt=html';
}

如果还有任何问题,请随时提出。