2012-11-06 21 views
1

匹配所有這些行的最佳方法是什麼?在前兩行中,我將有3組用戶/密碼/模式,但在最後一組中,我理想地希望擁有所有三組,但只有3的值是空字符串。正則表達式匹配具有相同組的可選參數

set admin user "user1" password "password1" privilege "all" 
set admin user "user2" password "password2" privilege "all" 
set admin user "user3" password "password3" 

我現在正則表達式只匹配第2

set admin user "(?<user>[\w-]+)" password "(?<password>.*)"(\s+privilege\s+"(?<mode>[\w-]+)") 

回答

2
set admin user "(?<user>[\w-]+)" password "(?<password>.*?)"(\s+privilege\s+"(?<mode>[\w-]+)")? 

?使得可選

+1

您還應該密碼樣式懶('( *)'?。?),否則它會總是搶特權了。 – MRAB

+0

良好的電話,MRAB!我更新了這個答案。 – kevingessner

+0

是的,這工作。我知道我嘗試了這個問號,它讓我的團隊1-6而不是1-3。我一定有括號搞砸了嗎? –

0

只需添加一個?作爲可選組或字符的最後一組。

ab?將匹配aab由於?b表明炭或基團是可選的。

又如:a(abc)?,因爲你已經告訴模式「編譯」的​​字符串是可選的,這將有abc反向引用匹配藏漢aaabc

一個真正很好地解釋可選項目:Optional Items in Regex