澄清正则表达式

时间:2013-06-26 17:26:32

标签: c# regex

在我支持的.Net WinForms应用程序中,有以下正则表达式:

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

我理解其中的大部分,所以我得到它匹配以〜#开头并以#〜结尾的字符串,然后用冒号分隔的组件。我不明白的是表达式的最后部分,特别是这部分:

(?::(.*))?

有谁可以解释这部分表达式匹配的内容?最后一个问号是否表示此部分是可选的?什么?::意思?

1 个答案:

答案 0 :(得分:7)

是的,最后一个问号表示该部分是可选的。前导?:使其成为非捕获组(该组不会包含在生成的组列表中,也不能用于反向引用等);第二个结肠只是一个冒号。

因此它可选地匹配冒号,后跟任意数量的任何内容。它会使最后一部分成为可选的,也可以匹配任意数量的部分。