2009-07-31 137 views
0

我有一个字符串动作 - [N] ew,[U] pdate或[D] elete:N,我需要用“Action - [N] ew,[U] pdate,或[D] elete:U“somhow通过使用preg_replace我不能得到它的工作。它仍然是一样的。使用preg_replace替换另一个字符串的文本字符串

我的代码看起来像这样

$action = Action - '[N]ew, [U]pdate, or [D]elete : U'; 
$line = preg_replace("/(Action - [N]ew, [U]pdate, or [D]elete : N)/",$action,$line); 

回答

3

[]是正则表达式中的特殊字符。你必须逃离他们,如果你想与它们匹配:

"/(Action - \[N\]ew, \[U\]pdate, or \[D\]elete : N)/" 

没有被转义,并表达内[]将匹配在其中每一个人物之一。所以在你原来的情况下,"[N]ew"匹配"New"。如果它是"[NP]ew",它将匹配"New""Pew"

+0

THX,这实际上是容易的,我必须要知道,太多的编码一天;-) – Roland 2009-07-31 15:30:06

0

尝试逃避 '[' 和 ']'

2

你不需要preg_replace做到这一点。一个简单的str_replace就足够了:

$action = 'Action - [N]ew, [U]pdate, or [D]elete : U'; 
$line = str_replace('Action - [N]ew, [U]pdate, or [D]elete : N', $action, $line); 
+0

+ 1的替代,更简单的解决方案。如果他的例子只是一个简化,我会让我的回答站在原地。 – Welbog 2009-07-31 15:30:24

2

夫妇的问题:

1)在你的第一行中的语法错误。你的报价错位。它应该是:

$action = "Action - [N]ew, [U]pdate, or [D]elete : N"; 

2)你需要在正则表达式逃脱方括号([])。或者,你可以这样做:

$line = preg_replace("/N$/", "U", $action); 

所以将它们结合起来:

$action = "Action - [N]ew, [U]pdate, or [D]elete : N"; 
$line = preg_replace("/N$/", "U", $action); 
相关问题