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

时间:2012-05-14 15:07:26

标签: php

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

Security/Flow_Setup/Steady_State/Verification

我只需要前两个级别(例如安全性/ Flow_Setup )是否有更简单的方法来实现此目的。目前我使用:'/'作为分隔符将字符串分解为数组,然后将元素0和1拼接在一起。

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

有什么想法吗?

5 个答案:

答案 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]+)?/'