2015-01-31 70 views
0

我想从这段代码是在PHP文件解析的DB_HOST,DB_NAME,DB_USER和DB_PASSWORD值:Perl的 - 从文件中解析特定数据

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

我目前的做法(据我这个反正得到)是存储在一个变量的文件,并解析值使用正则表达式一气呵成各自定义。我可以做到这一切都很好,很棒。但是,我只知道基本的正则表达式语法,不知道如何构建一个适用于此的语法。

我很感谢帮助提前〜

+1

你想要什么结果呢?你能依靠代码中从来没有双引号吗? – Borodin 2015-01-31 20:42:08

+0

对不起,我忘了包括但肯定的,有可能是双引号。 – th3v0id 2015-01-31 20:46:10

+0

好的,但是你想要的结果是什么?你想如何存储信息? – Borodin 2015-01-31 20:47:51

回答

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 2015-01-31 22:52:03