如何从多个数组中仅获取最后一个括号?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()执行相同的操作。您可以使用正则表达式\([^)]+$
如果您尝试了一些东西,您应该添加这些东西,以便我们可以帮助您解决当前问题。需要\([^)]+\)$