2015-01-31 34 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