Php 文本文件解析和转换为JSON?

Php 文本文件解析和转换为JSON?,php,json,regex,text-parsing,Php,Json,Regex,Text Parsing,首先,感谢您阅读本文!其次,我无法控制从中获取数据的.txt文件。我希望能够将数据分离成完整的匹配项,然后显示这些结果,然后显示即将进行的匹配项 例如: 最近完成的匹配 W6: John Smith vs. Joe Smith, 0-0 L7: Doug Smith vs. Jason Smith, 1-2 and so on W1: Joan Smith vs. Bruce Smith, 0-0 W1: Jenn Smith vs. David Smith, 0-0 and so on 即

首先,感谢您阅读本文!其次,我无法控制从中获取数据的.txt文件。我希望能够将数据分离成完整的匹配项,然后显示这些结果,然后显示即将进行的匹配项

例如:

最近完成的匹配

W6: John Smith vs. Joe Smith, 0-0
L7: Doug Smith vs. Jason Smith, 1-2
and so on
W1: Joan Smith vs. Bruce Smith, 0-0
W1: Jenn Smith vs. David Smith, 0-0
and so on
即将到来的比赛

W6: John Smith vs. Joe Smith, 0-0
L7: Doug Smith vs. Jason Smith, 1-2
and so on
W1: Joan Smith vs. Bruce Smith, 0-0
W1: Jenn Smith vs. David Smith, 0-0
and so on
这是一个示例文件:

来自上述链接的示例数据:

  <|>  Most Recent Completed Matches:  W6: Jason Bertolo vs. Ed Gabele, 0-0 | W6: Ed Gabele vs. Jason Bertolo, 0-0 | L7: Doug Metcalf vs. Jason Bertolo, 1-2 | L6: Tom Walsh vs. Jason Bertolo, 0-2 | L5: Jason Bertolo vs. Kevin Kronk, 2-0 | L5: Tom Walsh vs. Zach Dotson, 2-0 | L4: Kevin Kronk vs. Bruce Patete, 2-1 | L4: Zach Dotson vs. Tom Dotson, 0-0 | L3: Bruce Patete vs. Joseph Hornback, 2-0 | L3: Kevin Kronk vs. Matt Smith, 2-1 | L3: Matt Borders vs. Tom Dotson, 1-2 | L3: Zach Dotson vs. Mick Pillar, 2-0 | L2: David Mosel vs. Joseph Hornback, 0-2 | L2: Antoine Tucker vs. Matt Smith, 0-0 | L2: Tom Dotson vs. Mike Conley, 2-1 | L2: Mick Pillar vs. Hannah Fields, 2-0 | L1: Mike Minor vs. Joseph Hornback, 0-2 | L1: David Mosel vs. Tom Johnson, 2-1 | L1: Matt Smith vs. Jennifer Hamilton, 2-1 | L1: Lori Fields vs. Mike Conley, 1-2 | L1: Owen Miller vs. Tom Dotson, 1-2 | L1: Ken Kronk vs. Hannah Fields, 0-2 | W5: Ed Gabele vs. Doug Metcalf, 3-1 | W4: Doug Metcalf vs. Tom Walsh, 3-2 | W4: Jason Bertolo vs. Ed Gabele, 1-3 | W3: Tom Walsh vs. Kevin Kronk, 3-0 | W3: Bruce Patete vs. Doug Metcalf, 1-3 | W3: Ed Gabele vs. Zach Dotson, 3-1 | W3: Matt Borders vs. Jason Bertolo, 0-3 | W2: Kevin Kronk vs. Ken Kronk, 3-2 | W2: Mick Pillar vs. Tom Walsh, 2-3 | W2: Doug Metcalf vs. Owen Miller, 3-2 | W2: Lori Fields vs. Bruce Patete, 1-3 | W2: Matt Smith vs. Zach Dotson, 1-3 | W2: Antoine Tucker vs. Ed Gabele, 0-3 | W2: David Mosel vs. Jason Bertolo, 0-3 | W2: Matt Borders vs. Mike Minor, 3-1 | W1: Joseph Hornback vs. Ken Kronk, 2-3 | W1: Tom Walsh vs. Tom Johnson, 3-0 | W1: Jennifer Hamilton vs. Bruce Patete, 0-3 | W1: Zach Dotson vs. Mike Conley, 3-2 | W1: Ed Gabele vs. Tom Dotson, 3-0 | W1: Mike Minor vs. Hannah Fields, 3-1  <|>  Upcoming Matches:    <|>  
最近完成的比赛:W6:Jason Bertolo对Ed Gabele,0-0 | W6:Ed Gabele对Jason Bertolo,0-0 | L7:Doug Metcalf对Jason Bertolo,1-2 | L6:Tom Walsh对Jason Bertolo,0-2 | L5:Jason Bertolo对Kevin Kronk,2-0 | L5:Tom Walsh对Zach Dotson,2-0 | L4:Kevin Kronk对Jason,2-1:Bruce Zach Dotson,0-0-3:Bruce Patette vs.Joseph Hornback,2-0:L3:Kevin Kronk vs.Matt Smith,2-1:L3:Matt Borders vs.Tom Dotson,1-2:L3:Zach Dotson vs.Mick Pillar,2-0:David Mosel vs.Joseph Hornback,0-2:Antoine Tucker vs.Matt Smith,0-0:Tom Dotson vs.Mike Conley,2-1:Mick Pillar vs.Hannah Fields,2-0 | L1:Mike Minor vs.Joseph Hornback,0-2 | L1:David Mosel vs.Tom Johnson,2-1 | L1:Matt Smith vs.Jennifer Hamilton,2-1 | L1:Lori Fields vs.Mike Conley,1-2 | L1:Owen Miller vs.Tom Dotson,1-2 | L1:Ken Kronk vs.Hannah Fields,0-2 | W5:Ed Gabele vs.Doug Metcalf,3-1 | W4:Doug Metcalf vs.Tom Walsh,3-2 | W4:Jason Bertolo vs.Ed Gabele,1-3 | W3:Tom Walsh vs.Kevin Kronk,3-0 | W3:Bruce Patite vs.Doug Metcalf,1-3 | W3:Ed Gabele vs.Zach Dotson,3-1 | W3:Matt Borders vs.Jason Bertolo,0-3 | W2:Kevin Kronk vs.Ken Kronk,3-2:Mick Pillar vs.Tom Walsh,2-3 | W2:Doug Metcalf vs.Douch vs.Douch,Owen Miller vs.Lorite,1-3:W2:Matt Smith vs.Zach Dotson,1-3:Antoine Tucker vs.Ed Gabele,0-3:W2:David Mosel vs.Jason Bertolo,0-3:W2:Matt Borders vs.Mike Minor,3-1:Joseph Hornback vs.Ken Kronk,2-3:W1:Tom Walsh vs.Tom Johnson,3-0:W1:Jennifer Hamilton vs.Bruce Patette,0-3:Zach Dotson vs.Mike Conley,3-2 | W1:Ed Gabele vs.Tom Dotson,3-0 | W1:Mike Minor vs.Hannah Fields,3-1即将到来的比赛:
到目前为止,我尝试的代码是:

<?php
 $text = file_get_contents('https://drive.google.com/uc?export=download&id=11dW2pOK-MXHGRzQhJWb37tlWMqazj8UZ');
 $json = (explode('|',$text));
 //var_dump ($json);
 //print "\n";
 $trimmed = trim($text);
 print_r ($trimmed);
 ?>

看起来不错,但就我个人而言,我不知道如何简单地列出两个“|”字符之间的所有值

我能做些什么来操纵这篇文章,从而达到我想要的结果,你有什么想法吗

此外,您应该知道,在实际比赛期间,此数据将每60秒更改一次。我不知道这是否重要,但我想我会确保你知道这些数据不是静态的。唯一不变的是表示最近的匹配或完成的匹配,并且结果总是在两个字符之间


再次感谢您抽出时间

从你需要的开始。有很多方法可以使它更紧凑,但我想说清楚。您应该在preg_match调用的结果上添加错误检查,以便知道它是否由于某种原因失败

<?php
$text = file_get_contents('sample_data');

// The sample data has two sections,
// one for completed matches and one for upcoming matches.
// Extract the 'variable' text of these two sections:
preg_match('/^ *<\|>  Most Recent Completed Matches: (.+) <\|>  Upcoming Matches: (.+) <\|> *$/', $text, $reg_matches);

$completed_text = $reg_matches[1];
$upcoming_text  = $reg_matches[2];

// Within the text of a section, the matches are separated by '|',
// so split the section-text on that character:
$completed_array = explode("|", $completed_text);
$upcoming_array  = explode("|", $upcoming_text);

echo "\n";
echo "Most Recent Completed Matches\n";
echo "\n";
foreach ( $completed_array as $match_text )
{
    echo "$match_text\n";
}

echo "\n";
echo "Upcoming Matches\n";
echo "\n";
foreach ( $upcoming_array as $match_text )
{
    echo "$match_text\n";
}

?>


如果文本文件不包含JSON,为什么希望内容通过JSON验证?这里的实际问题是什么?您是否曾经尝试过将其转换为JSON?另外,请分享一个实际文件的小样本(您显示的内容中没有管道字符),以及一个
$matches
的样本。依赖外部链接是不好的,因为这些链接将来可能会断开。@El_Vanja查看我的编辑。此外,我不一定要将其转换为JSON,但如果这是我尝试进行转换时的最初想法的话。我正试图将其格式化,如我在网页上的上述问题所述。再次感谢您的阅读,我感谢您的反馈。此外,我不确定我是否理解否决票,因为这个问题比我见过的许多问题要好得多。此外,在我编辑之前,您要求的所有内容都是现成的,只需单击一下,但我想如果将来有人无意中发现,链接可能会失效。一个更简单的开始方法是使用
explode
和字符串操纵功能来实现您想要的结果。如果你想用正则表达式解析你的文件,我建议给它加上标签。@El_Vanja谢谢!我来看看。取得了一些进展,但在提取“|”字符之间的数据时遇到了另一个障碍。不走运!这太棒了!非常感谢你的帮助!如果你不介意帮我回答最后一个问题的话?结果是一个连续的字符串,所以我添加了\r\n其中只有\r\n个字符串,它仍然显示为一个字符串,但是在控制台中它看起来很完美。有什么建议吗?没关系,我又一次忘了,太好了!