Php 在文本文件中查找字符串,然后查找另一个字符串的第一个实例,然后获取后面的文本
我需要在文本文件中找到一个字符串。一旦找到,然后在第一个字符串下面找到第二个字符串的第一个实例,然后获取紧跟在第二个字符串后面的文本,并将该文本添加到一个变量中,以便稍后使用 这里是一个文本文件的样本,我需要在里面搜索Php 在文本文件中查找字符串,然后查找另一个字符串的第一个实例,然后获取后面的文本,php,string,search,Php,String,Search,我需要在文本文件中找到一个字符串。一旦找到,然后在第一个字符串下面找到第二个字符串的第一个实例,然后获取紧跟在第二个字符串后面的文本,并将该文本添加到一个变量中,以便稍后使用 这里是一个文本文件的样本,我需要在里面搜索 Tournament=Test Number=897 // I need to locate this Number. Currency=Primary BuyIn=0.01+0.02 PrizeBonus=0 MultiplyBonus=No Entrants=2 Late=
Tournament=Test
Number=897 // I need to locate this Number.
Currency=Primary
BuyIn=0.01+0.02
PrizeBonus=0
MultiplyBonus=No
Entrants=2
Late=0
Tickets=0
Removed=0
Rebuys=0
AddOns=0
RebuyCost=0+0
NetBonus=0
StopOnChop=No
Start=2020-03-02 04:07:56
Place2=Tuck (0)
Place1=TuckStream (0.02) // Then I need to locate "Place1=", then get the name that follows.
Stop=2020-03-02 04:08:47
摘要:在文件中找到正确的比赛编号后,我需要从文本文件中获取获胜者的姓名。同一文本文件中存储了多个巡回赛。文本文件在锦标赛结束后更新,然后运行一个事件并以字符串形式向我提供新的锦标赛号码
现在我只是抓取文件的所有内容(如上所述),然后用webhook将整个内容发布到discord。我更喜欢只发布获奖者的名字,“TuckStream”,如上面的示例所示
我还需要执行另一个仅包含玩家名称的操作,因此我需要将其添加到$Winner变量中(例如)。下面是事件处理程序中发布文件全部内容的当前代码
case "TourneyFinish":
fwrite($f,"Event = " . $event . "\n");
fwrite($f,"Name = " . $_POST["Name"] . "\n");
fwrite($f,"Number = " . $_POST["Number"] . "\n");
fwrite($f,"Time = " . $_POST["Time"] . "\n");
fwrite($f,"\n");
$TourneyName = $_POST["Name"];
// wait for file to be written to disk
sleep(10);
// find latest file
$path = "C:/TourneyResults";
$latest_ctime = 0;
$latest_filename = '';
$d = dir($path);
while (false !== ($entry = $d->read())) {
$filepath = "{$path}/{$entry}";
if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
$latest_ctime = filectime($filepath);
$latest_filename = $entry;
}
}
// post message in discord chan #tourney-annoucements
$getinfo = file_get_contents($path . "/" . $latest_filename);
$message = "**$TourneyName Results** \n $getinfo";
$data = ['content' => $message];
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents('https://discordapp.com/api/webhooks/mywebhook', false, $context);
break;
您可以使用
preg\u match\u all
一次性获得号码和赢家
$getinfo = file_get_contents($path . "/" . $latest_filename);
preg_match_all("/Number=(\d+).*?Place1=(.*?)\s/s", $getinfo, $info);
$message = "**$TourneyName Results** \nTournament Number " . $info[1][0] . "\nWinner " .$info[2][0];
echo $message;
返回:
**something undefined Results**
Tournament Number 897
Winner TuckStream
正则表达式模式首先查找数字,并获取此部分后面的数字:数字=(\d+)
然后它跳转到带有
*?
的位置1,并使用此部分Place1=(.*?\s
查找获奖者姓名。最后一部分是
/s
,这意味着它会搜索多行。那么您有什么问题?您的意思是需要一个正则表达式来查找897,然后Place1=(这个)?像这样:看起来它满足了我的需要@Andreas,谢谢!我对regex一无所知,但我会努力了解如何使用它。我会给你的解决方案下面的一个镜头,看看它如何进行。@TuckFheman好的,告诉我,如果你需要更多的帮助与代码明白了,对不起,我是一个n00bNumber=($TNumber)
成功了!