我想爲每個字,並將其合併爲1個字,如:可以正則表達式做得更快嗎?
首頁=首頁
關於美=關於我們
這是我目前使用的功能,可以正則表達式做得更好還是更高效?
public function formatClassName($name)
{
$name = str_replace('-', ' ', $name);
$name = ucwords($name);
$name = str_replace(' ', '', $name);
return $name;
}
我想爲每個字,並將其合併爲1個字,如:可以正則表達式做得更快嗎?
首頁=首頁
關於美=關於我們
這是我目前使用的功能,可以正則表達式做得更好還是更高效?
public function formatClassName($name)
{
$name = str_replace('-', ' ', $name);
$name = ucwords($name);
$name = str_replace(' ', '', $name);
return $name;
}
我不認爲一個正則表達式可以利用的話,那麼你仍然必須有兩個獨立的正則表達式,我想利用這種簡單的情況下,正則表達式是大材小用(認爲狩獵松鼠用大炮) 。此代碼簡單明瞭,易於理解。不要接觸它!
用正則表達式,你可能不得不使用一些「複雜」,就像preg_replace_callback
(要能應用strtoupper
或ucwords
功能),這將使你的代碼至少更難理解 - 可能較慢,但最重要的是你的代碼很容易理解。
考慮到您的解決方案的工作原理簡單易行,如果我在您的位置,我可能會保留它。
此代碼:
$in = Array("home", "about-us");
foreach ($in as $a) {
## this is the line you're looking for
$out = preg_replace('/-?\b(.)/e', "strtoupper('$1')", $a);
echo "$a = $out<br/>";
}
但我懷疑它的速度更快,而且我與其他評論者認爲它不一定是更好的同意。如果你是golfing,減少三條線到一個有毛的正則表達式是很好的。
RegEx可以將第一個字母大寫,但是您的建議已經失效,KISS。 – TravisO 2010-02-03 17:45:38
顯然,你從來沒有用炮兵獵殺過鬆鼠;) – 2010-02-03 18:15:48
因爲你可以傳遞'/ e'標誌並把PHP代碼作爲「替代品」,所以你可以用'preg'來大寫單詞。 – kennytm 2010-02-03 18:21:25