而不是使用正則表達式在這裏你應該分析的實用功能爲您的特殊格式字符串,它們是簡單的,他們不採取長寫的,他們會讓你的生活輕鬆了許多:
function readPath($path) {
$parameters = array();
foreach(explode('/', $path) as $piece) {
// Here we make sure we have something
if ($piece == "") {
continue;
}
// This here is just a fancy way of splitting the array returned
// into two variables.
list($key, $value) = explode(':', $piece);
$parameters[$key] = $value;
}
return $parameters;
}
function writePath($parameters) {
$path = "";
foreach($parameters as $key => $value) {
$path .= "/" . implode(":", array($key, $value));
}
return $path;
}
現在你可以在它剛剛工作作爲一個PHP數組,在這種情況下,你會去:
$parameters = readPath($string);
unset($parameters['st']);
$string = writePath($parameters);
這使得更可讀和可重用的代碼,還因爲大多數的時候,你正在處理的只有輕微的變化這種格式你可以改變分隔符每次甚至將這些函數抽象爲使用不同的分隔符。
另一種方式來處理這是符合正常的路徑查詢字符串轉換,使用類似:
function readPath($path) {
return parse_str(strtr($path, "/:", "&="));
}
你的情況,但由於您使用的是「=」字符在一個url中,你也需要對每個值進行url編碼,以免與格式衝突,但是這會涉及類似於上面的結構化代碼。
謝謝。如果想要匹配這個模式,當它發生在字符串的手中時?如in/sc:r2342/st:1 – giuseppe
找到。 /st:(.*?)\/|\/st:(.*?)$/ – giuseppe
正如我在我的回答中指出的那樣,懶惰匹配 - '。*?' - 不推薦使用,因爲它會影響性能,並可能會超過。也許情況並非如此,在這種情況下更多的是風格問題,但這是一個重要的說明。另外,我寧願接受首先給出的正確答案。 –