2011-11-14 23 views
1

我试图解决一个preg_replace神秘莫测没有成功,也许你可以帮助我。我有这样的句子:preg_replace有什么问题?

$string = preg_replace("/\[_BEGIN_\](.*?)\[_END_\]/", '', $string); 

它删除任何[_BEGIN_][_END_]元标记之间的所有内容。例如适用于:

"The [_BEGIN_] quick brown [_END_]fox jumps over the lazy dog" 

给出的结果是:

"The fox jumps over the lazy dog" 

的问题是它的工作原理在我的机器(Ubuntu的9.10,PHP v5.2.10),但在我的生产现场(Gentoo的1.6。 14,PHP v5.2.5-pl1-gentoo)失败(preg_replace返回相同的输入字符串)。

使用正则表达式有问题吗?我该如何解决这个问题?如何调试它?任何线索都会受到欢迎。谢谢。

+0

你的正则表达式似乎罚款的所有口味都支持

[^-._:A-Za-z0-9] 

尝试将其改变了这一点。我不知道PHP,但我听说单引号和双引号之间存在差异。围绕正则表达式使用单引号会改变什么? –

+0

@TimPietzcker它可以在“普通”系统上完美工作:http://codepad.org/1u5HEX9R – Marcus

+0

@Ivan试着制作一个简单的'preg_replace'测试文件,看看它是否有效。你是否启用了错误和警告? – Marcus

回答

1

我没有看到\C转义序列列表中的任何地方。难道不是(.*?)而不是(\C*?)

+0

不,对不起,我已经试过了没有成功:( – Ivan

+0

我同意,我从来没有听说过'\ C',我会去'/ \ [_ BEGIN _ \](。*?)\ [_ END _ \] /'也许'\ C '是什么平台特定的? –

+0

我已经检查过,没有成功。我编辑了这个问题,指出这不是问题。不管怎样,谢谢。 – Ivan

0

\C是一样的:因为没有为\C

+0

有趣!你有一个包含它的引用吗?找不到它这里:http://www.php.net/manual/en/regexp.reference.escape.php :( – Smamatti

+0

@Smamatti http://www.regular-expressions.info/refext.html – Marcus

+0

这不是问题。我仔细检查了一下,发现了同样的行为,我已经编辑了这个问题来说明这不是问题,谢谢。 – Ivan