我有数据希望粘贴到文本框中,它将采用以下形式。
Ryu Aiter D78:21:87:13 177 /177 1 / 6
Ryu Chronos D78:21:26:21 182 /182 0 / 6
Ryu Hermes D78:21:26:22 201 /201 0 / 6
Ryu Hefaistos D78:31:75:10 136 /136 1 / 2
Ryu Krotos D78:84:96:11 170 /170 1 / 6
Ryu Heros D78:65:51:31 175 /175 2 / 5
Ryu Arachnos D78:13:84:11 185 /185 0 / 5
它是这样分割的:
我想做的是为每行文本创建一个循环, 然后在该循环内将行的每个部分切分成每个组件的变量。
就分离它的想法而言,我知道
:
符号被禁止出现在名称和碱基中。
因此,如果我找到第一个“:”,则后退 2 步并获取接下来的 12 个字符,这就是我的位置。
我知道这可以通过循环来完成并检查if ($string[$x] === ':')
。
但是我如何循环这些线呢? 如何分离每行中的其余数据?
这就是正则表达式的用途:P 尝试一下:
$lines = explode( "\r\n", $data );
$users = array();
foreach( $lines as $line )
{
$matches = array();
$user = array();
preg_match( "/([^ ]+) ([^ ]+) ((?:[A-Z])(?:[0-9]+:){3}[0-9]+) ([0-9]+) \/([0-9]+) ([0-9]+) \/ ([0-9]+)/", $line, $matches );
list(,$user['name'],$user['base'],$user['location'],$user['econ'],$user['maxecon'],$user['used'],$user['total']) = $matches;
$users[] = $user;
}
您将有一个名为 users 的数组,其中包含一系列与组件关联的数组。就像下面...
Array
(
[0] => Array
(
[total] => 6
[used] => 1
[maxecon] => 177
[econ] => 177
[location] => D78:21:87:13
[base] => Aiter
[name] => Ryu
)
[1] => Array
(
[total] => 6
[used] => 0
[maxecon] => 182
[econ] => 182
[location] => D78:21:26:21
[base] => Chronos
[name] => Ryu
)
etc, etc...
编辑:我对数据做了很多假设,因为你没有提供很多细节,如果你需要表达式的进一步帮助,请告诉我。
根据您的评论更新:
Line 182: $name = htmlspecialchars(mysql_real_escape_string($_POST['name']));
Line 188: $tecon = htmlspecialchars(mysql_real_escape_string($user['econ']));
您应该打开 display_errors,因为它们是可以轻松调试的简单语法错误。
你能用爆炸逐渐分解它吗?
例如。
if(preg_match_all('/^([a-z]{1,16})\s+([a-z]{1,16})\s+(D\d+):(\d+):(\d+):(\d+)\s+(\d+)\s+\/(\d+)\s+(\d+)\s+\/\s+(\d+)$/mi', $yourinputgoeshere, $match) {
print_r($match);
}
未经测试,这应该将所有内容放入一个大数组中,分开。未经测试
扩展相同的想法,我尝试对另一页上的单行使用预匹配。
我使用代码
$data = $_POST['list'];
$matches = array();
$user = array();
preg_match( "/(.+?) ((?:[A-Z])(?:[0-9]+:){3}[0-9]+) ([0-9]+) \/([0-9]+) ([0-9]+) \/ ([0-9]+)/", $data, $matches );
list(,$user['base'],$user['location'],$user['econ'],$user['maxecon'],$user['used'],$user['total']) = $matches;
$base = $users['base'];
$location = $users['location'];
$tecon = $users['econ'];
我使用 echo 打印出 £data ,它包含预期的数据,但是没有行循环的相同代码不会将我的数据部分分隔到数组中。事实上, $user 的数组大小仍然为空,有什么出问题了吗?