1

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

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

我了解其中的大部分内容,所以我知道它匹配一个以 ~# 开头并以 #~ 结尾的字符串,然后包含用冒号分隔的组件。我不明白的是表达式的最后一部分,特别是这部分:

(?::(.*))?

谁能解释这部分表达式匹配什么?最后一个问号是否表明这部分是可选的?这是什么意思?

4

1 回答 1

7

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

所以它可以选择匹配一个冒号,后跟任意数量的任何东西。它将使最后一个部分成为可选的,并且还可以匹配任意数量的部分。

于 2013-06-26T17:28:07.200 回答