Разбор кода между блоками комментариев PHP

Допустим, у меня есть следующий фрагмент запуска в файле PHP:

/**
 * @SomethingStart
 */
protected static $var1 = '1';
protected static $var2 = '2';
protected static $var3 = '3';
/**
 * @SomethingEnd
 */

Я пытаюсь понять, как я могу сначала проанализировать содержимое между комментариями с помощью @SomethingStart и @SomethingEnd (не включая комментарий, а затем, во-вторых, как я могу заменить содержимое между этими двумя тегами.


person ryanzec    schedule 15.12.2011    source источник
comment
Вы можете использовать preg_replace_all   -  person Cyclonecode    schedule 15.12.2011


Ответы (1)


Вы можете получить содержимое файла с помощью функции:

file 

http://www.php.net/manual/en/function.file.php

Это возвращает массив строк. Затем вы можете использовать foreach и сопоставить содержимое строки с

$switch = false; 
$lines = file('filepath');
$string = '';
foreach($lines as $k => $v)
{
    if(preg_match('/@(.*)End$/'. $v))
    {
        $switch = false;
        break;
    }
    if($switch == true)
    {
        // do replacements, or anything you want with the following lines
        // or add, or remove, even if you might have some problems with it
        // for this you might not consider using foreach, instead you might
        // try array_walk
    }
    if(preg_match('/@(.*)Start$/', $v))
    {
        $switch = true;
    }


    $string .= $v;
}

echo $string;

Для array_walk прочтите этот http://www.php.net/manual/en/function.array-walk.php

Попытайся.

person khael    schedule 15.12.2011
comment
Возможно, preg_match начальной и конечной строк должен быть перед фактической обработкой строк, чтобы случайно не отредактировать их. - person Erbureth says Reinstate Monica; 15.12.2011
comment
Я отредактировал свой ответ, тест на конец должен быть раньше, а тест на начало в конце в логике foreach, когда он встретит команду остановки, он сломается, а с другой стороны только на следующем шаге команда запуска начнет изменять вещи. - person khael; 15.12.2011
comment
Спасибо, это именно то, что мне нужно (с небольшими поправками для моего конкретного случая) - person ryanzec; 20.12.2011