|
|
|
| Здравствуйте!Есть задача переименовать константы в 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".Естественно заменять в таких ситуациях не нужно!:(Как объяснить с помощью регулярного выражения что перед названием должно стоять четное количество кавычек таких (') или таких ("), т.е. заменять только те названия,которые не между кавычками!В сети ничего подобного не нашел!:(Всем Спасибо! | |
|
|
|
|
|
|
|
для: игорек
(30.11.2010 в 21:10)
| | /(?<=(?:'|"))\b(\w+)\b(?=(?:'|"))/Ui
В $1 - только слово в кавычках.
<?php
$prov='"pore" pore cloun \'dippest\' voxter "table" div table shooting "table apperions';
preg_match_all("/(?<=(?:'|\"))\b(\w+)\b(?=(?:'|\"))/Uis",$prov,$match);
echo "<pre>";
print_r($match[1]);
echo "</pre>";
?>
|
Выведет:
Array
(
[0] => pore
[1] => dippest
[2] => table
)
Ибо второй "table - с одной кавычкой.
А НЕ между кавычками задается так:
/(?<!(?:'|"))\b(\w+)\b(?!(?:'|"))/Ui | |
|
|
|