在我支持的.Net WinForms应用程序中,有以下正则表达式:
public static String MacroTemplate = @"(~#([^:]+):([^:]+):([^:]*)(?::(.*))?#~)";
我理解其中的大部分,所以我得到它匹配以〜#开头并以#〜结尾的字符串,然后用冒号分隔的组件。我不明白的是表达式的最后部分,特别是这部分:
(?::(.*))?
有谁可以解释这部分表达式匹配的内容?最后一个问号是否表示此部分是可选的?什么?::意思?
答案 0 :(得分:7)
是的,最后一个问号表示该部分是可选的。前导?:
使其成为非捕获组(该组不会包含在生成的组列表中,也不能用于反向引用等);第二个结肠只是一个冒号。
因此它可选地匹配冒号,后跟任意数量的任何内容。它会使最后一部分成为可选的,也可以匹配任意数量的部分。