2012-03-11 353 views
1

我試圖做一個preg-replace模式來將文本「orderId」轉換爲「order-id」。Preg替換PHP的模式

$argumentName = "orderId"; 
$argumentName = preg_replace("/([A-Z])/e", "-strtolower($1)", $argumentName); 
echo $argumentName; 

該行的輸出是「order0d」。爲什麼這不起作用?

+1

我真的不知道你的正則表達式如何與你的文本相關。這是你正在尋找的唯一情況嗎?如果是這樣的話,一些簡單的字符串操作就足夠了 – FailedDev 2012-03-11 12:57:29

+0

'-'是[算術運算符](http://php.net/language.operators.arithmetic),'strtolower'是一個返回字符串的函數。你應該能夠弄清楚其餘的。 – Gumbo 2012-03-11 13:01:05

+0

使用這樣的正則表達式對我來說仍然沒有意義。整個事情可以通過搜索我來代替,用-i替換。 – FailedDev 2012-03-11 13:14:00

回答

1

既然你指定你替換字符串是一個表達式,這一點:

strtolower($1) 

'i'(因爲它應該是),而這個:

-strtolower($1) 

-'i'(」負'i'「),這會強制將字符串'i'解釋爲數字— 0

你想要的是

$argumentName = preg_replace("/([A-Z])/e", "'-' . strtolower($1)", $argumentName); 

它連接了字符串'-''i'

+0

這很好。謝謝! – brasimon 2012-03-11 13:03:17

+0

@brasimon:不客氣! – ruakh 2012-03-11 13:09:01

1

爲什麼要使用/e

$argumentName = strtolower(preg_replace("/([A-Z])/", "-$1", $argumentName)); 

這會在任何大寫字母前放置一個破折號,然後降低整個字符串。