PHP选择单词后的某个单词


PHP select word after a certain word

大家好,我正在做一些事情,我要从一个字符串取一个人的ID,这是在那个人的名字之后。它的工作原理是,POST值存储在一个变量中。在本例中,$user = "Himatochi"。我想选择用户ID(如果重要的话,它是一个SteamID),它在字符串中紧接在用户名之后。但应该注意的是,字符串中列出的玩家和ID不止1个。

现在这里是字符串

hostname: Development Server version: 14.09.08/24 5914 secure udp/ip: 192.168.1.4:27015(公共ip: 135.120.128.85) map: gm_flatgrass at:0 x, 0 y, 0 z玩家:2(最多16个)#用户名唯一连接ping丢失状态adr # 2 "Chalu87" steam_0:1:7 07 377242 05:01 35 0激活192.168.1.4 . 27006 # 4 "Himatochi" STEAM_0:0:53654842 01:13 267 0 active 105.20.142.139:27005

我想用代码告诉PHP将$user后的SteamID存储到一个新变量

您可以使用正则表达式来完成此操作,假设数据结构一致并且始终设置了$user。

<?php
$user = 'Himatochi';
$data = 'hostname: Development Server version : 14.09.08/24 5914 secure udp/ip : 192.168.1.4:27015 (public ip: 135.120.128.85) map : gm_flatgrass at: 0 x, 0 y, 0 z players : 2 (16 max) # userid name uniqueid connected ping loss state adr # 2 "Chalu87" STEAM_0:1:70377242 05:01 35 0 active 192.168.1.4:27006 # 4 "Himatochi" STEAM_0:0:53654842 01:13 267 0 active 105.20.142.139:27005';
preg_match('~"' . preg_quote($user) . '"'s+(.*?)'s~', $data, $userid);
echo $userid[1];
输出:

STEAM_0:0:53654842

搜索"用户名(使用任何特殊的正则表达式字符转义)"然后至少一个空白。在空格之后,它捕获所有内容,直到下一个空格。下一个空白字符似乎是最容易匹配userid结尾的。

如果格式一致,您可以只使用字符串函数,这应该比调用复杂的正则表达式引擎要快得多。不过,您应该运行一个快速基准测试来确定。

<?php
$str = 'hostname: Development Server version : 14.09.08/24 5914 secure udp/ip : 192.168.1.4:27015 (public ip: 135.120.128.85) map : gm_flatgrass at: 0 x, 0 y, 0 z players : 2 (16 max) # userid name uniqueid connected ping loss state adr # 2 "Chalu87" STEAM_0:1:70377242 05:01 35 0 active 192.168.1.4:27006 # 4 "Himatochi" STEAM_0:0:53654842 01:13 267 0 active 105.20.142.139:27005';
$user = 'Himatochi';
$user = '"' . $user . '"';
$str = substr(strrchr($str, $user), 2);
$userId = substr($str, 0, strpos($str, " "));
echo $userId;