我有一个字符串,它看起来像以下:有没有一种更简单的方法来截断PHP正则表达式的字符串?
Security/Flow_Setup/Steady_State/Verification
我只需要前两个级别(例如安全/ Flow_Setup)是否有更简单的方法来得到这个。目前我爆炸串入一个数组使用:“/”作为分隔符,然后拼凑元素0和1
这工作,但我希望的一个更好的解决方案。
有什么想法?
我有一个字符串,它看起来像以下:有没有一种更简单的方法来截断PHP正则表达式的字符串?
Security/Flow_Setup/Steady_State/Verification
我只需要前两个级别(例如安全/ Flow_Setup)是否有更简单的方法来得到这个。目前我爆炸串入一个数组使用:“/”作为分隔符,然后拼凑元素0和1
这工作,但我希望的一个更好的解决方案。
有什么想法?
我不认为你可以得到比这也更优雅/短,如果你只需要前两个部分:
list($var1, $var2) = explode('/', $str);
正则表达式是完全没有必要在这里。
有人在comments提到dirname
,我认为是一个聪明的,可能适当的想法,很短,可读的(并且得到你所需要的,而不是像上面的代码中两个独立的部分字符串):
$str = 'Security/Flow_Setup/Steady_State/Verification';
echo dirname(dirname($str));
// Output: Security/Flow_Setup
这是优雅的!而且(至少对我来说)更具可读性。 –
这个表达式应该这样做
'/^([a-zA-Z]+\/[a-zA-Z]+)?/'
我相信你所做的一切ok了。你可以尝试一下这种方式,如果你喜欢:
$str = "Security/Flow_Setup/Steady_State/Verification";
echo substr($str, 0, strpos($str, '/', strpos($str, '/') + 1));
(不涉及阵列,应该是快一点点)
这似乎更好,我认为它更具可读性。 – user1216398
这里是最短和最快捷的班轮我可以想出:
$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'));
最佳答案IMO。在不是真正的路径的字符串上使用dirname看起来很尴尬,但是谁知道 - 也许它是一个。 –
你见过'dirname()'函数?它几乎没有任何杂乱的正则表达式废话你正在寻找什么。 (如果你叫它两次,在你的情况下) – Spudley