Переименовать константы в PHP файле

игорек87

Новичок
Здравствуйте!Есть задача переименовать константы в php файле, созданные функцией
define().Чтобы найти таковые пользуюсь, ну например этим регулярным выражением

$df=preg_match_all("/define\s*\(\s*[\'|\"](\w*)[\'|\"]\s*,[^,]*,\s*\w*\s*\)/i",$text,$mass_def,PREG_SET_ORDER);
if($df){
foreach($mass_def as $k){
$a[]=$k[1];
}
}



Здесь все понятно.В массиве $a записаны имена констант!
Нужно с помощью регулярных выражений заменить эти названия на другие...
Возьмем к примеру константу
define("TABLE",'test',true);


Проблем не возникает с заменой,но а вот если в скрипте встречается такая строчка:

...
$text='TABLE - Хороший тег в HTML';
...



и тоже произведется замена "TABLE".Естественно заменять в таких ситуациях не нужно!:(Как объяснить с помощью регулярного выражения что перед названием должно стоять четное количество кавычек таких (') или таких ("), т.е. заменять только те названия,которые не между кавычками!В сети ничего подобного не нашел!:(Всем Спасибо!
 
В чем глубокий смысл сиих действий?
 
игорек87
не проще ли воспользоваться готовыми решениями?
 
нет! я поэтому и обратился на форум,чтобы разобраться,а не использовать чужие куски кода...
 
игорек87
тогда иди читай про регулярки, или готовое желает барин?
 
Эх, Игорек, Игорек... Велосипеды безусловно рулят
 
Вот идей нет, тогда тема закрыта.А то я смотрю полно таких на форумах с вопросами :"А зачем?", "А почему?","Не проще ли воспользоваться готовыми решениями?"
 
игорек87
у тебя даже формулировка проблемы не покрывает все возможные случаи
например
PHP:
$a = "olo\"lo";
define("trollface","cool ' face");
проверка на чётность не есть решение
у пыха было расширение парсящее php код на лексемы,тебе к нему,потом пройдёшься и поменяешь их на нужные
BTW
не проще ли воспользоваться готовыми решениями?
 
игорек87
говорим, а толку? ты мог взять готовый скрипт и сделать за час-другой, но процесс дороже результата. кстати вот ещё вариант. ты же всё равно задалбёшь мозг себе с заменой констант.
http://www.php.net/manual/en/tokenizer.examples.php
ха, пока писал уже пнули в нужном направлении на данную ссылку
 
На самом деле глобальный вопрос!Относится не только к константам,определенных функцией define(),но и к замене имен функций, классов,даже вырезки комментарий!!!
Вырезал комментарии, так мой скрипт DOCTYPE поковеркал ( '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">') .Вообщем нужная вещь, объяснить с помощью регов что вырезать между кавычками не нужно!!!Так понял там одной строчкой регулярки не обойдешься!Почему я не прогаммист NOTEPAD++ :),там то все "подсвечивается" сразу.Не посилам мне...
 
игорек87
NOTEPAD++ - проект с открытым исходным кодом
скачай посмотри как там сделанно
 
Сверху