2015-01-08 26 views
0

我有2種不同類型的連接字符串(由於遺留原因,由於各種原因無法在任何地方修復,因此這裏無關)。我需要將它們分解爲鍵/值對。下面是示例連接字符串:標記連接字符串的正則表達式

1. Server=SomeServer;Database=SomeDatabase;Something=Hello 
2. Server=SomeServer,Database=SomeDatabase;Something=Hello 
3. Server=SomeServer,1111;Database=SomeDatabase;Something=Hello 

對於第2例,我可以使用正則表達式:

(?<Key>[0-9A-z\s]+)=(?<Val>[0-9A-z\s,]+?[0-9A-z\s]+) 

對於第三個,我可以使用正則表達式:

(?<Key>[0-9A-z\s]+)=(?<Val>[0-9A-z\s]+?[0-9A-z\s,]+) 

如何將它變成適用於所有情況的一個正則表達式?

+0

'[0-9A-z \ s,] +?[0-9A-z \ s] +'的用途是什麼?這[危險](http://www.regular-expressions.info/catastrophic.html)。 –

+1

也許[使用DbConnectionStringBuilder](http://stackoverflow.com/questions/8524611/parsing-a-connection-string)會工作嗎? –

+0

@Rawing:第一部分做了一個懶惰的比賽,在「=」之後抓到了第一個字母 - 然後我試圖用貪婪的比賽來捕捉其餘的部分。 – Denis

回答

1

這裏是我的建議。

(?<key>[^=;,]+)=(?<val>[^;,]+(,\d+)?) 

分號是一個分隔符,如果沒有緊跟數字,分號就是逗號。

+0

這個工程!真棒! – Denis

2

你可以使用下面的正則表達式

(?<Key>[^=;]+)=(?<Val>[^;]+) 

什麼上述用途是否定的字符類。 [^;]+將選擇一切,直到它遇到的第一個;

DEMO(我已經刪除用於測試的命名組,它會在C#中很好地工作,但是)

+0

不適用於案例2 – Denis

+0

@Denis是的。試試吧 –

+0

@Denis檢查我編輯過的正則表達式 –

相關問題