regex lookbehind пропустить многострочные комментарии

Мне нужно преобразовать приложение из PHP 4 в приложение PHP 7. В частности, я должен исправить проблему, в которой переменные, поступающие из форм HTML, не определены явно на целевой странице, перехваченной POST или REQUEST. Я собираюсь сделать это вручную, но сначала мне нужно их найти.

Для этого я хотел написать регулярное выражение, которое проверяет, была ли переменная PHP ранее определена на странице. Мне удалось сделать это с помощью обратных ссылок и неограниченного просмотра (некоторые языки позволяют это), но я не могу управлять многострочными комментариями //. Мне нужно пропустить их в поиске позади.
Я смог пропустить комментарий типа строки // … и записать содержимое комментариев, но не выходить за его пределы, пропуская полностью: объявление переменной перед /../ не соответствует регулярному выражению.

Я использую PowerGrep 4 в качестве движка регулярных выражений.

Здесь мой неполный регулярное выражение, он использует обратные ссылки и вложенные lookbehinds:

(?<!(?<!//.*)\1[\s]*\=[\s]*.*;[^\*]*[^/]*)(\$\b(?:[^\_])[a-zA-Z-_\d]+\b)(?![\s]*[\=]{1}[^\=])

ПРИМЕР: дан код:

blabla $var  /*  blabla /  *  $var = 2 * / blabla */   $var

он должен соответствовать $ var дважды до и после комментария, игнорируя определение внутри комментария.

Также учтите следующее:

blabla $var  blabla  $var = 2  /*  blabla /  *  $var  * / blabla */   $var

должен соответствовать только первому $ var, потому что только первому вхождению $ var не предшествует определение переменной.

В настоящее время я могу создать регулярное выражение, которое может либо вернуться к проверке соответствия назначению, даже если оно находится внутри многострочных комментариев (WRONG), либо игнорировать назначение внутри комментариев, но не может обнаружить какое-либо назначение ДО многострочного комментария, что опять неверно.

Я не могу найти способ получить оба вышеупомянутых поведения одновременно.

У кого-нибудь есть решение или другие идеи по моей проблеме?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]