Если у меня есть следующий код и хотим вернуть только PHP блок, содержащий «функция хуг», используя регулярное выражение:Использование регулярных выражений для поиска конкретной матч между PHP анкеров
<?php
function xyz(
// Code goes here
)
?>
<!-- HTML code here -->
<?php
// Other code
echo "Its done!";
?>
Я пытался сделать следующее регулярное выражение:/(< \ PHP?) * функция хуг * (\>?)/s, чтобы получить следующий результат:..
<?php
function xyz(
// Code goes here
)
?>
Но вместо получения ожидаемого результата, он заканчивает тем, что дает мне все, что между первым «< \? Php» и последним «\?>». Может ли кто-нибудь предложить правильный синтаксис регулярных выражений для этого?
Поскольку теги PHP могут лежать внутри тегов PHP, регулярные выражения не являются подходящим инструментом для задания. Вам нужно будет написать лексер и парсер. Тем не менее, главный вопрос заключается в том, почему вы пытаетесь использовать lex и анализировать файл PHP в первую очередь. – 2013-02-26 20:23:07
Причина, по которой я пытаюсь это сделать, - это то, что мой сайт был взломан, и сотни моих файлов PHP получили к ним вредоносные блоки PHP. Я пытался написать PHP-скрипт, чтобы рекурсивно пройти через все мои PHP-файлы и удалить блокировочные блоки PHP с помощью file_get_contents в строку, а затем использовать preg_replace для удаления злоумышленного блока PHP, а затем file_put_contents, чтобы перезаписать файл PHP. – Scott
Существует полезный [токенизатор PHP] (http://php.net/token_get_all). Я хорошо использовал его при анализе огромной базы кода для существования устаревших/удаленных функций до обновления PHP. – Wiseguy