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