我有一个如下所示的字符串:
Security/Flow_Setup/Steady_State/Verification
我只需要前两个级别(例如安全性/ Flow_Setup )是否有更简单的方法来实现此目的。目前我使用:'/'作为分隔符将字符串分解为数组,然后将元素0和1拼接在一起。
这有效,但我希望有一个更优雅的解决方案。
有什么想法吗?
答案 0 :(得分:7)
如果你只需要前两件,我认为你不会比这更优雅/更短:
list($var1, $var2) = explode('/', $str);
这里完全不需要正则表达式。
有人在dirname
中提到comments,我认为这是一个聪明且可能合适的想法,并且非常简短且易读(并且可以获得您需要的字符串,而不是像代码那样的两个独立部分以上):
$str = 'Security/Flow_Setup/Steady_State/Verification';
echo dirname(dirname($str));
// Output: Security/Flow_Setup
答案 1 :(得分:3)
我相信你做的一切都好。如果您愿意,可以这样试试:
$str = "Security/Flow_Setup/Steady_State/Verification";
echo substr($str, 0, strpos($str, '/', strpos($str, '/') + 1));
(不涉及任何数组,应该更快一点)
答案 2 :(得分:2)
不是典型用法,也不是字符串函数,但由于你的字符串实际上是一个路径,也许这就足够了......
dirname(dirname('Security/Flow_Setup/Steady_State/Verification'));
答案 3 :(得分:1)
这是我能提出的最短,最有效的单线:
$firstTwoParts = implode('/', array_slice(explode('/', $str, 3), 0, 2));
这可以包装成一个函数,让你控制你想要多少部分:
function first_n_parts ($str, $n, $delimiter = '/') {
return ($n = (int) $n) ? implode($delimiter, array_slice(explode($delimiter, $str, $n + 1), 0, $n)) : '';
}
...所以你可以这样做:
echo first_n_parts($str, 1); // Security
echo first_n_parts($str, 2); // Security/Flow_Setup
echo first_n_parts($str, 3); // Security/Flow_Setup/Steady_State
答案 4 :(得分:0)
这个正则表达式应该这样做
'/^([a-zA-Z]+\/[a-zA-Z]+)?/'