我正在看一些代码,并开始考虑使用preg_replace
截断字符串(在本例中为URI)的最有效方法。使用preg_replace截断字符串的最有效方法?
第一关 - 我意识到,摆在首位使用preg_replace
可能是矫枉过正完成这个任务,它可能是不必要的昂贵,而且它可能会更好地使用PHP的字符串友好的功能来处理诸如substr
。我知道这一点。
尽管如此,考虑这两个不同的正则表达式:
$uri = '/one/cool/uri'; // Desired result '/one/cool'
// Using a back-reference
$parent = preg_replace('#(.*)/.*#', "$1", $uri);
// Using character class negation
$parent = preg_replace('#/[^/]+$#', '', $uri);
默认情况下,我会假设,在前者的情况下,创造了反向引用将是比不这样做更昂贵,为此第二个例子会更好。但是后来我开始想知道在第二个例子中使用[^/]
可能比第一个例子中对应的.
更昂贵,如果是这样,还有多少?
我喜欢的第一个例子从可读性的角度来看,因为我们是鸡蛋里挑骨头,我走向(以书面可读的代码过于毕竟,有值)两者之间选择它倾斜。虽然可能只是我个人的偏好。
想法?
你似乎知道你在问什么,所以为什么不设置一个标杆?我的直觉也假定否定是较便宜的,但那只是我的_gut_。我没有数据支持它。制作一些数据! –
注意,第二个版本可以使用占有欲量词(抑制回溯)会更高效:'#/ [^ /] + $#' –