 <p>You can only use one character per range in a regex and most regex parsers don't understand multiple bytes using the <code>\x</code> notation. Use the <code>\u</code> notation instead.</p> <pre><code>(:|[A-Z]|_|[a-z]|[\xC0-\xD6]|[\xD8-\xF6]|[\xF8-\u02FF]|[\u0370-\u037D]|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[\u10000-\uEFFFF]) </code></pre> <p><a href="http://msdn.microsoft.com/en-us/library/4edbef7e.aspx" rel="nofollow">The .NET regex documentation</a> states</p> <blockquote> <p><code>\x20</code> Matches an ASCII character using 2-digit hexadecimal. In this case, <code>\x2-</code> represents a space.</p> </blockquote> <p>And for unicode:</p> <blockquote> <p><code>\u0020</code> Matches a Unicode character using exactly four hexadecimal digits. In this case <code>\u0020</code> is a space.</p> </blockquote> <p>So I've used both above, <code>\x</code> for the 2-char hex values and <code>\u</code> for the larger ones.</p>