@
\{
(
(?:[\-#=\@!%$*+?])?
\w
[\w\-\.\d]*
) (?#1 param name)
(
\?
)? (?#2 optional)
(?:
<(.*?)?\|(.*?)?> (?#3 behind)(?#4 after)
)?
(?:
:(
[\w&]
[\w\.\-\d\s]*
(?:\[\])?
) (?#5 type)
(?:
\(
([^{]+?) (?#6 type args)
\)
(?:
\(
([^\}]) (?#7 type args separator)
\)
)?
)?
)?
(?:
:\(
([^{]+) (?#8 pattern)
\)
)?
(?:
=(
[^}]*
) (?#9 default value)
)?
\} |
(
\{?
[^{]+
) (?#10 plain text)
@
x