2012-03-11 192 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)); 

这会在任何大写字母前放置一个破折号,然后降低整个字符串。