说我有这个用户列表:
Michael (43)
Peter (1) (143)
Peter (2) (144)
Daniel (12)
最右边括号中的数字是用户编号。
我想循环每个用户并获得列表中最高的用户编号,在本例中为144
。
我该怎么做呢?我确信它可以通过某种正则表达式完成,但我不知道如何。我的循环很简单:
$currentUserNO = 0;
foreach ($users as $user) {
$userNO = $user->NameUserNo; // NameUserNo is the string to be stripped! ex: "Peter (2) (144)" => 144
if ($userNO > $currentUserNO) {
$currentUserNO = $userNO;
}
}
echo "The next user will be added with the user number: " . $currentUserNO + 1;
答案 0 :(得分:2)
您可以使用正则表达式:
/\((\d+)\)$/
^ glued to the end of the string
^^ closing parentheses
^^^ the number you want to capture
^^ opening parentheses
捕获最后一组括号中的数字/字符串末尾。
但你也可以使用一些基本的数组和字符串函数:
$parts = explode('(', trim($user->NameUserNo, ' )'));
$number = end($parts);
分解为:
rtrim()
); 答案 1 :(得分:1)
如果你对正则表达不舒服,你不应该使用它们(并开始认真学习它们*因为它们非常强大但很神秘)。
与此同时,您不必使用正则表达式来解决问题,只需使用(假设NameUserNo只包含列表中的一行):
$userNO = substr(end(explode('(',$user->NameUserNo;)),0,-1);
应该更容易理解。
答案 2 :(得分:0)
我认为您正在寻找的正则表达式是:
.+\((\d+)\)$
哪个字符应该选择所有字符,直到它到达括号中包含的最后一个数字。
您可以用来提取数字的PHP代码:
$userNO = preg_replace('/.+\((\d+)\)$/', '$1', $user);
我尚未对此进行测试,但应为用户$userNO
设置43
至Michael
,为用户143
设置Peter
,依此类推。
答案 3 :(得分:0)
我想这基本上就是你要找的东西:
<?php
$list = array();
foreach $users as $user) {
preg_match('/$([a-zA-Z]+).*\([1-9]+\)$/', , $tokens);
$list[$tokens[2]] = $tokens[1];
}
ksort($list);
$highest = last(array_keys($list));
echo "The next user will be added with the user number: " . $highest++;
答案 4 :(得分:0)
使用正则表达式非常容易。
foreach ($users as $user) {
# search for any characters then a number in brackets
# the match will be in $matches[1]
preg_match("/.+\((\d+)\)/", $user->NameUserNo, $matches);
$userNO = $matches[1];
if ($userNO > $currentUserNO) {
$currentUserNO = $userNO;
}
}
因为正则表达式使用贪婪匹配,.+
(即搜索一个或多个字符)将在它到达括号中的数字之前尽可能多地获取输入字符串。
答案 5 :(得分:0)
我对PHP很新,但你不能用它来做:
$exploded = explode(" ", $user->NameUserNumber);
$userNo = substr(end($exploded), 1,-1);