我在编译器设计中使用C#正则表达式。
我正在使用词法分析器,我必须根据我设置的规则对代码进行标记。
我将字符串定义为[\".*?\"]
,双引号为[\"]
。
当我输入"Hi"
时,它被读作STRING TOKEN。
但当我输入" \" "
时,会产生" \"
的STRING和"
的DOUBLE-QUOTE。
我希望它被读作STRING TOKEN。
换句话说,我想正确解析包含转义双引号的字符串。
答案 0 :(得分:2)
我相信你想要的模式是:
"(?:[^"]|\")*"
这将匹配引号内的任何非引号字符或斜杠引号对。例如:
var input = @"1 2 3 ""Hello \""Word\""!""";
var match = Regex.Match(input, @"""(?:[^""]|\"")*""");
Console.WriteLine(match.Value); // "Hello \"Word\"!"
答案 1 :(得分:0)
尝试打印输入的每个字符的ASCII代码。反斜杠将具有不同的效果,具体取决于您的输入是在命令行上,通过GUI还是从文件中。
您不情愿的匹配器可能会将\
视为一个角色,而不是"
的修饰符。