读“内”......“作为字符串标记

时间:2013-07-10 04:05:48

标签: c# regex

我在编译器设计中使用C#正则表达式。

我正在使用词法分析器,我必须根据我设置的规则对代码进行标记。

我将字符串定义为[\".*?\"],双引号为[\"]

当我输入"Hi"时,它被读作STRING TOKEN。

当我输入" \" "时,会产生" \"的STRING和"的DOUBLE-QUOTE。

我希望它被读作STRING TOKEN。

换句话说,我想正确解析包含转义双引号的字符串。

2 个答案:

答案 0 :(得分:2)

我相信你想要的模式是:

"(?:[^"]|\")*"

这将匹配引号内的任何非引号字符或斜杠引号对。例如:

var input = @"1 2 3 ""Hello \""Word\""!""";
var match = Regex.Match(input, @"""(?:[^""]|\"")*""");

Console.WriteLine(match.Value); // "Hello \"Word\"!"

答案 1 :(得分:0)

尝试打印输入的每个字符的ASCII代码。反斜杠将具有不同的效果,具体取决于您的输入是在命令行上,通过GUI还是从文件中。

您不情愿的匹配器可能会将\视为一个角色,而不是"的修饰符。