2013-06-26 4 views
1

В приложении .NET WinForms, что я поддерживаю есть следующее регулярное выражение:Разъяснения по регулярному выражению

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

Я понимаю, большинство из них, так что я получаю, что соответствует строке, которая начинается с ~ # и заканчивается на # ~, а затем имеет компоненты, разделенные двоеточиями. Что я не понимаю, это последняя часть выражения, в частности эта часть:

(?::(.*))? 

Может ли кто-нибудь объяснить, что соответствует этой части выражения? Означает ли последний знак вопроса, что эта часть является необязательной? Что значит?

ответ

7

Да, последний вопросительный знак указывает, что эта деталь является необязательной. Ведущий ?: делает его не захватной группой (группа не будет включена в результирующий список групп и не может использоваться в обратных ссылках и т. Д.); вторая двоеточие - всего лишь двоеточие.

Таким образом, он необязательно соответствует двоеточию, за которым следует любое количество чего угодно. Это сделает последний раздел необязательным и может также соответствовать любому количеству разделов.

+0

Спасибо, minitech. Теперь это имеет смысл. Нехватывающая группа была понятием, которое мне было незнакомо. – BruceHill