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

dai*_*isy 2 .net c# regex

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

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

Regex reg = new Regex  (pattern);
Run Code Online (Sandbox Code Playgroud)

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

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

感谢您的任何回复.

Qui*_*ith 5

-字符发生在一个特殊意义的字符类中[...]表示一个范围,从而使速记这样的表达式了以下工作:

"[a-z]" // matches all lowercase alphabetic characters without having to specify them all.
Run Code Online (Sandbox Code Playgroud)

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

老实说,它是第一个还是最后一个角色应该没有区别.


Kob*_*obi 5

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

这应该工作:

string pattern = "(\\d+)([+*/-])(\\d+)";
Run Code Online (Sandbox Code Playgroud)

或者,使用逐字字符串文字:

string pattern = @"(\d+)([+*/-])(\d+)";
Run Code Online (Sandbox Code Playgroud)