在创建用于批处理文件语法突出显示的正则表达式模式时出现问题

时间:2019-03-14 16:32:16

标签: c# regex

我有以下代码来为我正在使用的文本编辑器创建语法高亮显示。它使用FastColoredTextBox组件。我不能完全正确地突出显示批处理文件变量的正则表达式模式。

private void batchSyntaxHighlight(FastColoredTextBox fctb)
    {
        fctb.LeftBracket = '(';
        fctb.RightBracket = ')';
        fctb.LeftBracket2 = '\x0';
        fctb.RightBracket2 = '\x0';
        Range e = fctb.Range;
        e.ClearStyle(StyleIndex.All);
        //clear style of changed range
        e.ClearStyle(BlueStyle, BoldStyle, GrayStyle, MagentaStyle, GreenStyleItalic, BrownStyleItalic, YellowStyle);
        //variable highlighting
        e.SetStyle(YellowStyle, "(\".+?\"|\'.+?\')", RegexOptions.Singleline);
        //comment highlighting
        e.SetStyle(GreenStyleItalic, @"(REM.*)");
        //attribute highlighting
        e.SetStyle(GrayStyle, @"^\s*(?<range>\[.+?\])\s*$", RegexOptions.Multiline);
        //class name highlighting
        e.SetStyle(BoldStyle, @"(:.*)");
        //symbol highlighting
        e.SetStyle(MagentaStyle, @"(@|%)", RegexOptions.Singleline);
        e.SetStyle(RedStyle, @"(\*)", RegexOptions.Singleline);
        //keyword highlighting
        e.SetStyle(BlueStyle, @"\b(set|SET|echo|Echo|ECHO|FOR|for|PUSHD|pushd|POPD|popd|pause|PAUSE|exit|Exit|EXIT|cd|CD|If|IF|if|ELSE|Else|else|GOTO|goto|DEL|del)");
        //clear folding markers
        e.ClearFoldingMarkers();
        BATCH_HIGHLIGHTING = true;
    }

使用此代码,我似乎无法在不突出显示几乎整个文件的情况下突出显示两个'%'符号之间的字符串,因为许多行将仅包含一个'%'符号或彼此相邻的两个符号。

我在使用'::'注释时也遇到麻烦。为了突出显示标签,我创建了正则表达式模式以匹配其中带有':'的所有行,然后是所有继续该行的字符。

我想使突出显示正确,以便标签将突出显示BoldStyle,而'::'注释将突出显示GreenItalicStyle,而不会发生任何冲突。我还希望能够突出显示两个'%'符号之间没有冲突的字符串(例如仅包含一个'%'的行)

所有这些都应仅在注释中不突出显示。

编辑:目前,该代码仅高亮显示了'%'符号,因为我无法使代码在它们之间高亮显示而又不会引起主要的语法问题。

1 个答案:

答案 0 :(得分:0)

非常感谢@DougF帮助我找到了这个解决方案。答案是:

@"^:[a-zA-Z]+"