我正在看一些代碼,並開始考慮使用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_。我沒有數據支持它。製作一些數據! –
注意,第二個版本可以使用佔有慾量詞(抑制回溯)會更高效:'#/ [^ /] + $#' –