2016-02-18 4 views
0

Например, у нас есть некоторый текст, как это:Remove/Strip нежелательная функция (preg_replace)

// comments 
    someFunc.f.log({ 
     obj:obj, 
     other:other 
    }); 
    console.log('here'); 
    someFunc.f.log({ 
     obj:obj, 
     other:other 
    } 
); 
    console.log('here'); 
    // comments 

Я хочу от этого текста полосы someFunc.f.log(); функции на бэкэнде PHP и в выходе:

// comments 
console.log('here'); 
console.log('here'); 
// comments 

Как мы можем достичь этой точки?

+1

Есть ли вложенные скобки ? Иначе вы можете попробовать [что-то вроде этого] (https://eval.in/520985). –

+0

Thaaanks !!! В это время нет. Но, может быть, вы можете предоставить решение и для этой ситуации? – Vital

ответ

1

Если нет никаких вложенных скобок, вы можете попробовать с this regex regex101

$str = preg_replace('/^\h*someFunc\.f\.log\([^)]*\);\R*|^\h+/m', "", $str); 

like this demo at eval.in. Если есть вложенные скобки, попробуйте с that recursive regex regex101

'/^\h*someFunc\.f\.log(\((?>[^)(]*(?1)?)*\));\R*|^\h+/m' 

like another demo at eval.in

  • ^ матчи началом строки с m многострочным flag
  • | является символом трубы для чередования
  • \h соответствует горизонтальному пространству
  • [^ ... открывает Отрицающий символьный класс
  • (?1) пасты первых Скобок subpattern
  • \R соответствует любой последовательности новой строки

(более объяснения и генератор кода доступен на regex101)

+0

Спасибо. Все хорошо!!!! – Vital

+0

Добро пожаловать! Сделать точку с запятой необязательной, если необходимо ';?' –