1

不确定我是否只是愚蠢或其他什么,但我在这里为 Shape5.com 工作,我在那里制作了 Vertex Framework .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 永远根据他们使用的模板而变化,这真的让我很烦恼正如我们所看到的那样,如果有人可以帮助它粉碎。

偏移量 67 是最后一个),是的,我尝试将其转义,将其删除,您将其命名为我尝试过:D

我敢打赌,这很简单,哈哈

谢谢戴夫

4

1 回答 1

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 ^^^^^

更新:如果(.*?)打算作为非贪婪匹配组,则不要逃避它。

于 2012-06-18T20:54:30.297 回答