从字符串的最后一组括号中获取文本

时间:2014-10-13 21:13:20

标签: php regex

说我有这个用户列表:

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;

6 个答案:

答案 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);

应该更容易理解。

* Is there a good, online, interactive regex tutorial?

答案 2 :(得分:0)

我认为您正在寻找的正则表达式是:

.+\((\d+)\)$

哪个字符应该选择所有字符,直到它到达括号中包含的最后一个数字。

您可以用来提取数字的PHP代码:

$userNO = preg_replace('/.+\((\d+)\)$/', '$1', $user);

我尚未对此进行测试,但应为用户$userNO设置43Michael,为用户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);