3

我有一个如下所示的字符串:

Security/Flow_Setup/Steady_State/Verification

我只需要前两个级别(例如Security/Flow_Setup)有没有更简单的方法来获得这个。目前我将字符串分解为一个数组,使用:'/' 作为分隔符,然后将元素 0 和 1 拼凑在一起。

这可行,但我希望有一个更优雅的解决方案。

有什么想法吗?

4

5 回答 5

7

如果您只需要前两部分,我认为您不会比这更优雅/更短:

list($var1, $var2) = explode('/', $str);

正则表达式在这里完全没有必要。

dirname有人在评论中提到,我认为这是一个聪明且可能合适的想法,并且非常简短易读(并为您提供所需的字符串,而不是像上面的代码那样的两个单独的部分):

$str = 'Security/Flow_Setup/Steady_State/Verification';

echo dirname(dirname($str));

// Output: Security/Flow_Setup
于 2012-05-14T15:10:23.080 回答
3

我相信你做的一切都很好。如果你喜欢,你可以这样尝试:

$str = "Security/Flow_Setup/Steady_State/Verification";
echo substr($str, 0, strpos($str, '/', strpos($str, '/') + 1));

(不涉及数组,应该快一点)

于 2012-05-14T15:12:47.147 回答
2

不是典型用法也不是字符串函数,但由于您的字符串实际上是一条路径,也许这就足够了......

dirname(dirname('Security/Flow_Setup/Steady_State/Verification'));
于 2012-05-14T16:18:03.487 回答
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
于 2012-05-14T15:23:24.773 回答
0

这个正则表达式应该这样做

'/^([a-zA-Z]+\/[a-zA-Z]+)?/'
于 2012-05-14T15:11:14.653 回答