我在查看一些代码并开始考虑使用 preg_replace
最有效的方法来截断字符串(在本例中是一个URI)。
首先 - 我意识到在这种情况下使用 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);
默认情况下,我认为在前一种情况下,创建反向引用比不创建更加昂贵,因此第二个示例更可取。但是,我开始想知道在第二个示例中使用
[^/]
是否比第一个示例中的相应.
更昂贵,如果是,那么差距有多大?从易读性的角度来看,我更喜欢第一个示例,而且我们正在纠结这些细节,所以在这两个示例之间我倾向于选择它(毕竟,编写易读的代码也很有价值)。但这可能只是我的个人偏好。
你有什么想法吗?
#/[^/]++$#
。 - Martin Ender