As described in Mono bug 69193 (http://bugzilla.ximian.com/show_bug.cgi?id=69193), Mono chokes when attempting to parse the regular expression on line 59 of <src>/core/util/Helper.cs:

m_VarRegex = new Regex(@"\${(?<var>[\w|_]+)}");

A simplified test app shows that the following exception  is thrown when Mono attempts to parse the regex:
Unhandled Exception: System.ArgumentException: parsing
"\${(?<var>[\w|_]+)}" - Illegal {x,y}

The same code runs fine under MS.NET (apparently the only .NET variant used to test this 'cross-platform' code). 

In order to understand this error, it would be helpful to know just what this regex is supposed to do - I can't figure it out and after some research would conclude that this expression appears to be bogus.

All the sources I've consulted identify the use of curly braces as indicative of conditional evaluation which takes the form '{n,m}?'.  The Mono error would support this, since it complains about illegal {x,y}, and there isn't a 'y' component in the above expression.

At this point it's hard to say whether this is a bug in Mono that needs to be addressed, or a bug in Microsoft's implementation (the latter being too permissive).

So, is this a valid regular expression that Mono should be parsing, or should it be rewritten in a more explicit form that would run under both Mono and MS.NET?

Thanks.