2015-01-31 3 views
0

Я пытаюсь разобрать значения DB_HOST, DB_NAME, DB_USER и пароль_базы_данных из этого блока кода, который находится в PHP файле:Perl - Разбор конкретных данных из файла

define('DB_NAME', 'foobar_db'); 
define('DB_USER', 'foobar_user'); 
define('DB_PASSWORD', 'foobar_password'); 
define('DB_HOST', 'localhost'); 

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

Я ценю помощь заранее ~

+1

Какой результат вы хотите точно? Можете ли вы полагаться на отсутствие двойных кавычек в коде? – Borodin

+0

Извините, что я забыл включить это, но да, могут быть двойные кавычки. – th3v0id

+0

Хорошо, но какой результат вы хотите точно? Как вы хотите сохранить информацию? – Borodin

ответ

3

Это должно помочь вам на пути к решению. Он просто извлекает все последовательности из слов символов (буквенно-цифровой и подчеркивающий) из каждой строки и использует второе и третье поля в качестве имени и значения переменной.

Это не будет работать, если значения будут когда-либо более сложными, чем простая строка с кавычками, или если значения могут содержать нечто, отличное от символов слова, например пробелов.

use strict; 
use warnings; 

while (<DATA>) { 
    my @fields = /\w+/g; 
    my ($var, $val) = @fields[1,2]; 
    printf "%-12s = %s\n", $var, $val; 
} 

__DATA__ 
define('DB_NAME', 'foobar_db'); 
define('DB_USER', 'foobar_user'); 
define('DB_PASSWORD', 'foobar_password'); 
define('DB_HOST', 'localhost'); 

выход

DB_NAME  = foobar_db 
DB_USER  = foobar_user 
DB_PASSWORD = foobar_password 
DB_HOST  = localhost 
+0

Спасибо за ответ. Я постараюсь построить поверх этого и посмотреть, смогу ли я придумать решение. – th3v0id

Смежные вопросы