помогите с регуляркой

wbrframe

Новичок
помогите с регуляркой

Здравствуйте.

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

Есть языковые файлы, со след. содержимым:

PHP:
define('LNG_ControlPanel', 'Control Panel');
define('LNG_Statistics', "Statistics");
.....
Задача

Получить массив след. формата:
PHP:
array (
   'название константы' => 'значение'
)
====================================

Задача простенькая, до тех пор, пока в значении не встречаются js код, html теги.

Вот регулярка:

PHP:
"/define\(\'(LNG_[\w\/\(\)\:\-\+]+)\',[\s]*[\"\']*[\s]*([^define]{6})[\s]*[\"\']*[\s]*\);/"   (1-я рег.)
Из 671 константы у меня отпарсило 32.

Использование (.*?) вместо ([^define]{6}), даёт намного лучший вариант.
но опять таки, подводные камни на тегах и коде.

В целом, проблема только в том, чтобы отпарсить значение.

====================================
Может поможет в решении.
Почему под 1-ю рег. не подошла строка?

define('LNG_EmailAddress', 'Email Address');
====================================
 

DiMA

php.spb.ru
Команда форума
\' -- не слешить

[^define]{6} -- бред (это равноценно [^finede]{6}), который решает спец. выражение (?! ... ) или (?= ... )

вместо / ... /, используй неиспользуемые ограничители, например ! ... !

внутри [ ] ничего слешить не надо, а минус расположить справа (слешишь квантификатор "+" -- бред)

[\s]* замени на \s*


Отлаживай свой говнорег сам. Для этого удаляй по чуть-чуть справа и смотри, когда рег начнет выдавать TRUE.

Но вообще, сама задача - бред сивой кобылы.
1. Хранить фразы нужно как текст в массивах. Код - клиника.
2. В Пхп есть функции работы с константами. Замени "define", на функцию "MyDefine" и сконверти в языковые файлы с массивами.
 

wbrframe

Новичок
DiMA, спасибо.

2-я идея натолкнула на мысль, вот так реализовать:
PHP:
<?php
$contentFile = file_get_contents( файл.php );
$contentFile = str_replace(array('<?php', '?>'), '', $contentFile);
$contentFile = str_replace('define(', '$statistics->getValueDefine(', $contentFile);
			
eval( $contentFile );
?>
==================================
Я не разработчик этого скрипта.
У них вот такая реализация, так что работал с тем, что было.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Вот здесь теме и место =)
 

wbrframe

Новичок
Языковых файлов более 20. Констант бог знает сколько.

Группа переводчиков-идиотов, не подумала о нормальной статистике по переводу и теперь не могут сказать количество кило-знаков.

+ Встречается много одинаковых предложений. Заказчик за это платить не хочет.

Ему нужна подробная статистика по файлам:
файл | исходный текст | переведенный | кол. знаков
 

iceman

говнокодер
ну канешна легче написать регулярку, чем подрубить нужные файлы, сохранить результат и заново подрубить другие файлы, если их настолько много, автоматизируй это дело

P.S. header('Location: ' . '...');
 

FractalizeR

Новичок
Автор оригинала: iceman
ну канешна легче написать регулярку, чем подрубить нужные файлы, сохранить результат и заново подрубить другие файлы, если их настолько много, автоматизируй это дело

P.S. header('Location: ' . '...');
А что "header('Location')"?
 
Сверху