PHP在某个单词后选择单词

时间:2015-05-26 01:38:57

标签: php regex

大家好,我正在处理一些事情,我会从一个字符串中取一个人的ID,这是在该人的名字之后。它是如何工作的,POST值存储在变量中。在这种情况下,$ user =" Himatochi"。我想在字符串中选择名字后面的用户ID(如果重要的话,它是一个SteamID)。但应该注意的是,字符串中列出了超过1个玩家和ID。

所以现在这里是我的字符串

  

主机名:开发服务器版本:14.09.08 / 24 5914 secure udp / ip   :192.168.1.4:27015(公共IP:135.120.128.85)地图:gm_flatgrass at:   0 x,0 y,0 z player:2(16 max)#userid name uniqueid connected   ping loss state adr#2" Chalu87" STEAM_0:1:70377242 05:01 35 0有效   192.168.1.4:27006#4" Himatochi" STEAM_0:0:53654842 01:13 267 0有效105.20.142.139:27005

所以我基本上想要代码告诉PHP在$ user之后将SteamID存储到一个新变量中。

2 个答案:

答案 0 :(得分:3)

您可以使用正则表达式来实现此目的,假设数据结构一致且$ 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结尾的东西。

答案 1 :(得分:0)

如果格式是一致的,那么只需使用字符串函数就可以逃脱,这应该比调用正则表达式引擎的复杂性更快。你应该运行快速基准来确定。

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