php preg_replace help编译失败:无法匹配的括号

时间:2012-06-18 20:50:51

标签: php joomla preg-replace vertex

不确定我是不是只是愚蠢或者其他东西但是我在这里工作Shape5.com并且我在那里制作了顶点框架问题是Joomla不断更新,这已经在我们的论坛中出现了几次错误是警告:preg_replace( )[function.preg-replace]:编译失败:偏移67处的不匹配括号

这是我们的代码

<?php
$script = "Hello window.addEvent('domready', function(){ new Fx.Accordion($$('div#template-sliders-116.pane-sliders > .panel > h3.pane-toggler'), $$('div#template-sliders-116.pane-sliders > .panel > div.pane-slider'), {onActive: function(toggler, i) {toggler.addClass('pane-toggler-down');toggler.removeClass('pane-toggler');i.addClass('pane-down');i.removeClass('pane-hide');Cookie.write('jpanesliders_template-sliders-116',$$('div#template-sliders-116.pane-sliders > .panel > h3').indexOf(toggler));},onBackground: function(toggler, i) {toggler.addClass('pane-toggler');toggler.removeClass('pane-toggler-down');i.addClass('pane-hide');i.removeClass('pane-down');if($$('div#template-sliders-116.pane-sliders > .panel > h3').length==$$('div#template-sliders-116.pane-sliders > .panel > h3.pane-toggler').length) Cookie.write('jpanesliders_template-sliders-116',-1);},duration: 300,opacity: false,alwaysHide: true}); });";
$script = preg_replace("/window.addEvent('domready', function(){ new Fx.Accordion(.*?)}); });/", '', $script);
echo $script;
?>

问题是Fx.Accordion永远在变化,这取决于他们使用什么模板,这真的很烦我现在有时它有效它有时候我没有试过逃避一些所有但没有但仍然得到错误上面的代码将正如我们所看到的那样,如果任何人都可以帮助粉碎那么,就会重现错误。

Offset 67是最后一个)是的我已经尝试逃避它删除它你的名字我试过:D

我打赌它的东西很简单lol

谢谢戴夫

1 个答案:

答案 0 :(得分:2)

圆括号是PCRE中用于捕获分组的特殊字符,需要通过反斜杠进行转义,{}本身就是范围说明符和点.

$script = preg_replace("/window\.addEvent\('domready', function\(\)\{ new Fx.Accordion\(.*?\)\}\); \}\);/", '', $script);

我想我已经完全逃脱了。我假设(.*?)并非打算成为捕获组。 ?实际上是不必要的,因为.*表示任何字符都是零或更多。

$script = preg_replace("/window\.addEvent\('domready', function\(\)\{ new Fx.Accordion(.*?)\}\); \}\);/", '', $script);
//-----------------------------------------------------------------------Don't escape ^^^^^

更新:如果(.*?)打算作为一个非同意的匹配组,那么就不要逃避它。