2013-12-12 117 views
1

我很努力地分離鍵和值的正則表達式匹配。perl正則表達式匹配單個字符分隔符

要求是分隔符是':',但密鑰可以有多個「::」。值可以有':',但鍵不能。所以第一個':'應該是分隔符。如果值之前有空格,則應該消除。

我有以下的正則表達式,但它失敗的關鍵:值,(沒有空間後':')。

if ($_ =~ /^(.+?):\s+(.*)$/) 
{ 
    $data{$1} = $2; 
} 

有效鍵值:

key:value 
key: value 
key: value::subvalue 
key::subkey:value 
key::subkey:value:subvalue 
key::subkey: value:subvalue 
key::subkey::subsubkey:value 

注意項,子項的值,子值可以是任何文字內容替換。 我的正則表達式適用於除第一個之外的所有其他正則表達式。

任何想法?

我可以有一個elsif並添加另一個正則表達式,但我不知道是否可以有一個單一的正則表達式的整個事情。

感謝,

+1

我們可以得到有效和無效的字符串的樣本集? – Vache

+0

我添加了一些示例鍵值。 – Amir

+1

@阿米爾:拜託,你能否加入無效的例子? –

回答

1

您可以使用此模式:

/^((?>[^:]+|::)+):\s*(.*)$/