c#regex和[]表达式,为什么[+*/-]解析失败
本文关键字:失败 为什么 表达式 c#regex | 更新日期: 2023-09-27 17:59:51
我试图在c#中使用Regex,但以下代码引发异常:
string pattern = "('d+)([+*/-])('d+)";
Regex reg = new Regex (pattern);
经过一番挖掘,我发现在c#中,如果你试图将"-"与[]表达式匹配,它必须放在括号中的第一个字符,这让我很困惑。
有人能跳出来向我解释一下吗?
感谢您的回复。
-
字符在字符类[...]
中具有特殊含义,用于表示范围,因此类似以下的简写表达式起作用:
"[a-z]" // matches all lowercase alphabetic characters without having to specify them all.
只有当-
是第一个字符时,才从字面上解释它,因为它之前没有其他值,所以不能表示范围
老实说,无论是第一个角色还是最后一个角色都应该没有区别。
该代码没有引发运行时异常-该代码没有编译,错误为"无法识别的转义序列"-您没有正确转义反斜杠。'd
不是有效的转义符。
这应该有效:
string pattern = "(''d+)([+*/-])(''d+)";
或者这样,使用逐字逐句的字符串文字:
string pattern = @"('d+)([+*/-])('d+)";