我從正則表達式中獲得了一些意想不到的結果,這意味着要替換名稱空間上的類名。替換看起來會發生兩次,以便替換的類名稱被重複(請參見下面的示例)。preg_replace雙重替換
我實際上已經解決了這個問題,通過改變reg ex來匹配1或更多(+
)而不是0或更多(*
),這實際上對於我想要的更準確。
但是,我有點困惑,爲什麼我首先得到一個問題。
這是問題的一個例子:
$classns = 'components\groups\GroupsController';
$newclass = 'GroupsAccess';
$classns = preg_replace('/[^\\\\]*$/', $newclass, $classns);
echo $classns;
結果
components\groups\GroupsAccessGroupsAccess
預計
components\groups\GroupsAccess
是否有可能的是,*是匹配的,一個字邊界或東西性質?
對我來說,令人困惑的部分是使用相同正則表達式的preg_match只顯示一個結果,所以它看起來像是preg_match如何運行正則表達式。
例如
preg_match('/[^\\\\]*$/', $classns, $m);
var_dump($m);
結果
array(1) { [0]=> string(12) "GroupsAccess" }
'preg_match_all'顯示什麼? 'preg_match' _always_最多顯示一個匹配項。 –
@JanDvorak好的。它顯示兩場比賽。 –
你爲什麼不直接在這裏使用str_replace? – Evert