php preg_replace help Сбой компиляции: несоответствующие скобки
Не уверен, что я просто тупой или что-то в этом роде, но здесь я работаю на Shape5.com, и я сделал там Vertex Framework. Проблема в том, что 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 навсегда меняется в зависимости от того, какой шаблон они используют, и это действительно беспокоит меня сейчас, иногда это работает, иногда я даже не пытался экранировать все и ничего, но все равно получаю ошибку, код выше будет воспроизводить ошибку Точно так же, как мы видим, если кто-то может помочь, что это будет разбить.
Смещение 67 - последнее) и да, я попытался убежать, удалив его, назовите это, я попытался:D
Могу поспорить, что-то простое LOL
Спасибо Дэйв
1 ответ
Скобки - это специальные символы в 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 ^^^^^
Обновление: если (.*?)
был задуман как несвободная спичечная группа, тогда не избегайте этого.