有没有更简单的方法用PHP正则表达式截断字符串?

有没有更简单的方法用PHP正则表达式截断字符串?,php,Php,我有一个如下所示的字符串: Security/Flow_Setup/Steady_State/Verification 我只需要前两个级别(例如,安全性/Flow\u设置)是否有更简单的方法来实现这一点。目前,我使用“/”作为分隔符将字符串分解为一个数组,然后将元素0和1拼合在一起 这是可行的,但我希望有一个更优雅的解决方案 有什么想法吗?如果您只需要前两件,我认为您不可能得到比这件更优雅/简洁的款式: list($var1, $var2) = explode('/', $str); 这里完

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

Security/Flow_Setup/Steady_State/Verification
我只需要前两个级别(例如,安全性/Flow\u设置)是否有更简单的方法来实现这一点。目前,我使用“/”作为分隔符将字符串分解为一个数组,然后将元素0和1拼合在一起

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


有什么想法吗?

如果您只需要前两件,我认为您不可能得到比这件更优雅/简洁的款式:

list($var1, $var2) = explode('/', $str);
这里完全不需要正则表达式

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


这个正则表达式应该可以做到这一点

'/^([a-zA-Z]+\/[a-zA-Z]+)?/'

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

$str = "Security/Flow_Setup/Steady_State/Verification";
echo substr($str, 0, strpos($str, '/', strpos($str, '/') + 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

这不是一个典型的用法,也不是字符串函数,但由于字符串实际上是一个路径,所以这可能就足够了

dirname(dirname('Security/Flow_Setup/Steady_State/Verification'));

您看过
dirname()
函数吗?它做的和你想要的差不多,没有任何乱七八糟的正则表达式。(在你的例子中,如果你叫它两次)最好的答案,依我看。在不是真正的路径的字符串上使用dirname似乎很尴尬,但谁知道呢——也许是一个。
dirname(dirname('Security/Flow_Setup/Steady_State/Verification'));