在我支持的.Net WinForms应用程序中,有以下正则表达式:
public static String MacroTemplate = @"(~#([^:]+):([^:]+):([^:]*)(?::(.*))?#~)";
Run Code Online (Sandbox Code Playgroud)
我理解其中的大部分,所以我得到它匹配一个以〜#开头并以#〜结尾然后用冒号分隔的组件的字符串.我不明白的是表达式的最后一部分,特别是这部分:
(?::(.*))?
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这部分表达式匹配的内容吗?最后一个问号是否表示此部分是可选的?这是什么意思?
是的,最后一个问号表示该部分是可选的.领先?:使得它的非捕获组(该组将不被包括在所产生的组的列表,并且不能在反向引用并且这样的使用); 第二个冒号只是一个冒号.
所以它可选地匹配冒号,后跟任意数量的任何东西.它会使最后一部分成为可选的,也可以匹配任意数量的部分.