复杂的正则表达式

本文关键字:正则表达式 复杂 | 更新日期: 2023-09-27 18:35:09

我在这里需要一些帮助; 我正在尝试制作一些Regex表达式,以便在我的代码中捕获单词int,任何数学运算,任何数字和=符号,而忽略所有其他符号。 将被忽略的单词将设置为 false,而其他单词设置为 true,如下面的代码所示。

这将用于标记上述关键字,以实现可以检测整数溢出的词法分析器。 我需要专门用Regex来完成此操作.

我已经成功地捕获了单词int,数学运算和数字,但我的Regex似乎无法识别任何随机单词;例如变量名称(数字1,数字2等)和语言中的任何其他单词,例如if语句,圆括号,大括号等...

        lexer.AddDefinition(new TokenDefinition(
            "(operator)",
            new Regex(@"'*|'/|'+|'-"),
            false));
        lexer.AddDefinition(new TokenDefinition(
            "(literal)",
            new Regex(@"'d+"),
            false));
        lexer.AddDefinition(new TokenDefinition(
            "(Random Word)",
            new Regex(@"(?=.*[A-Z])(?=.*[a-z])"),
            false));
        lexer.AddDefinition(new TokenDefinition(
            "(integer)",
            new Regex(@"'bint'b"),
            false));
        lexer.AddDefinition(new TokenDefinition(
            "(white-space)",
            new Regex(@"'s+"),
            true));

       // This is not working.  Random words such as variable names are not being captured by this.
        lexer.AddDefinition(new TokenDefinition(
            "(random-word)",
            new Regex(@"'b(?=.*[A-Z])(?=.*[a-z])'b"),
            true));
       // What about the brackets?  How can I implement a Regex to capture brackets?

这似乎很简单,但我无法完成。 请分享您的意见,欢迎任何意见。

复杂的正则表达式

'b(?=...) 都是零长度匹配。换句话说,它们不会捕获任何内容,它们只是断言一个条件,如果不满足该条件,正则表达式将失败。

我不确定你所说的"随机单词"到底是什么意思,但对于 C# 中的变量,我会这样做:

'b[a-zA-Z_]'w*'b

这匹配一个单词边界,然后是一个字母或下划线,后跟 0 个或多个字母/下划线/数字,并以单词边界结尾。

评论后的小更新:这不会给非 ASCII 字符带来问题,也不会与其他 TokenDefiner 已经处理int不匹配。

'b(?!int)[a-zA-Z_][a-zA-Z0-9_]*'b