如何从多个数组中仅获取最后一个括号?PHP

如何从多个数组中仅获取最后一个括号?PHP,php,arrays,Php,Arrays,我有几个数组,只能选择最后一个括号中的数组。怎么做 例如,我的一些数组总是相似的,但可能不同: Array ( [0] => 3 BUILTIN\Users:(OI)(CI)(F) ) Array ( [0] => BUILTIN\Users:(OI)(CI)(R) ) Array ( [0] => 22 BUILTIN\Users:(OI)(CI)(R,W) ) 我想从中得到如下结果: (F) (R) (R,W) 我必须使用substr还是什么?

我有几个数组,只能选择最后一个括号中的数组。怎么做

例如,我的一些数组总是相似的,但可能不同:

Array
(
    [0] => 3 BUILTIN\Users:(OI)(CI)(F)
)
Array
(
    [0] => BUILTIN\Users:(OI)(CI)(R)
)
Array
(
    [0] => 22 BUILTIN\Users:(OI)(CI)(R,W)
)
我想从中得到如下结果:

(F)
(R)
(R,W)
我必须使用substr还是什么? 问候

你可以走了

$arr = array(
        '3 BUILTIN\Users:(OI)(CI)(F)',
        'BUILTIN\Users:(OI)(CI)(R)',
        '22 BUILTIN\Users:(OI)(CI)(R,W)'
    );
$newArr = array();
foreach($arr as $k => $v){
    $lastElement = array_filter(explode('(',explode(':',$v)[1]));
    $newArr[] = '('.$lastElement[count($lastElement)];
}
print_r($newArr);
结果:-

Array
(
 [0] => (F)
 [1] => (R)
 [2] => (R,W)
)

只需使用
preg\u过滤器

$arr = array(
    '3 BUILTIN\Users:(OI)(CI)(F)',
    'BUILTIN\Users:(OI)(CI)(R)',
    '22 BUILTIN\Users:(OI)(CI)(R,W)'
);

print_r(preg_filter('/^.+(\([^)]+\))$/', '\1', $arr));
输出

Array
(
    [0] => (F)
    [1] => (R)
    [2] => (R,W)
)

正则表达式

  • ^
    -匹配字符串的开头
  • +
    -匹配任何一个或多个“贪婪”
  • (…)
    -第一个捕获组
    • \(
      the
      字面意思
    • [^]+
      匹配任何“非”
    • \)
      the
      字面意思
  • $
    -匹配字符串的结尾
因此,这将用
\1
-第一个捕获组替换每个数组项中不在捕获组中的所有内容。从最后一个
的开始(
到该“集合”
的结束)的所有内容都应该匹配。基本上,我们想要的只是最后一个括号的“填充”,这很好,因为上面的代码就是这么做的(奇怪的是,就像有人按照我们需要的方式来设置它…哈哈)

这还应该从数组中删除与该模式不匹配的任何内容。例如:

$arr = array(
    '3 BUILTIN\Users:(OI)(CI)(F)',
    'BUILTIN\Users:(OI)(CI)(R)',
    '22 BUILTIN\Users:(OI)(CI)(R,W)',
    'foo' //--- foo will not appear in the results, because it does not end with (...)
);
希望有帮助

preg\u filter()preg\u replace()相同,只是它只返回匹配的(可能转换的)主题。有关此函数工作原理的详细信息,请阅读preg\u replace()文档。


*PS我给出了上述示例,因为它突出了
preg\u replace()
preg\u filter()
之间的区别(如上所述)。如果您确定每个项目中始终存在匹配项,则可以对preg_replace()执行相同的操作。

您可以使用正则表达式
\([^)]+$
如果您尝试了一些东西,您应该添加这些东西,以便我们可以帮助您解决当前问题。需要
\([^)]+\)$