复杂的正则表达式
本文关键字:正则表达式 复杂 | 更新日期: 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