澄清正则表达式

Bru*_*ill 1 c# regex

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

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

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

(?::(.*))?
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这部分表达式匹配的内容吗?最后一个问号是否表示此部分是可选的?这是什么意思?

Ry-*_*Ry- 7

是的,最后一个问号表示该部分是可选的.领先?:使得它的非捕获组(该组将不被包括在所产生的组的列表,并且不能在反向引用并且这样的使用); 第二个冒号只是一个冒号.

所以它可选地匹配冒号,后跟任意数量的任何东西.它会使最后一部分成为可选的,也可以匹配任意数量的部分.