2013-06-26 43 views
1

在,我支持有以下的正則表達式的.Net WinForms應用程序:澄清一個正則表達式

public static String MacroTemplate = @"(~#([^:]+):([^:]+):([^:]*)(?::(.*))?#~)"; 

我瞭解大部分,所以我得到它與開頭的字符串相匹配〜 #並以#結尾,然後用冒號分隔組件。我不明白的是表達式的最後部分,具體是這個部分:

(?::(.*))? 

任何人都可以解釋這部分表達式匹配嗎?最後一個問號是否表明這部分是可選的?這是什麼意思?

回答

7

是的,最後一個問號表示該部分是可選的。領先的?:使它成爲一個非捕獲組(該組不會被包含在結果列表中,不能用於反向引用等);第二個冒號只是一個冒號。

因此,它可以選擇匹配一個冒號,後面跟着任意數目的任何東西。這將使最後一部分可選,也可以匹配任意數量的部分。

+0

謝謝,minitech。現在有道理。非捕獲組是我不熟悉的概念。 – BruceHill