c#regex和[]表达式,为什么[+ * / - ]无法解析?

时间:2011-06-19 08:56:18

标签: c# .net regex

我试图在c#中使用Regex,但以下代码抛出异常:

string pattern = "(\d+)([+*/-])(\d+)";

Regex reg = new Regex  (pattern);

经过一番挖掘后,我发现在c#中如果你试图将' - '与[]表达式匹配,它必须作为该括号中的第一个字符,这让我很困惑。

有人可以跳出来向我解释一下吗?

感谢您的任何回复。

2 个答案:

答案 0 :(得分:5)

-字符在字符类[...]中具有特殊含义以表示范围,因此速记表达式如下所示:

"[a-z]" // matches all lowercase alphabetic characters without having to specify them all.

-只是字面上解释,如果它是第一个字符只是因为它不能表示范围,因为它之前没有其他值。

老实说,无论是第一个还是最后一个角色都没有区别。

答案 1 :(得分:5)

该代码不会抛出运行时异常 - 代码无法编译,错误“无法识别的转义序列” - 您没有正确地转义反斜杠。 \d不是有效的转义字符。

这应该有效:

string pattern = "(\\d+)([+*/-])(\\d+)";

或者,使用verbatim string literals

string pattern = @"(\d+)([+*/-])(\d+)";