c#regex和[]表达式,为什么[+*/-]解析失败

本文关键字:失败 为什么 表达式 c#regex | 更新日期: 2023-09-27 17:59:51

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

string pattern = "('d+)([+*/-])('d+)";
Regex reg = new Regex  (pattern);

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

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

感谢您的回复。

c#regex和[]表达式,为什么[+*/-]解析失败

-字符在字符类[...]中具有特殊含义,用于表示范围,因此类似以下的简写表达式起作用:

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

只有当-是第一个字符时,才从字面上解释它,因为它之前没有其他值,所以不能表示范围

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

该代码没有引发运行时异常-该代码没有编译,错误为"无法识别的转义序列"-您没有正确转义反斜杠。'd不是有效的转义符。

这应该有效:

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

或者这样,使用逐字逐句的字符串文字:

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