C ++中的正则表达式用于匹配某些模式

Regex in c++ for maching some patters

我想要这个的正则表达式。

我想实现这个。但是有点困惑,因为我是使用 Regex 的新手。谁能分享这些正则表达式?

如果这是一个较长的项目并且以后会有更多的要求,那么采用不同的方法肯定会更好。

解决此类问题的标准方法是定义语法,然后创建词法分析器和解析器。可以使用工具 lex/yacc 或 flex/bison。或者,也可以手工制作一个简单的 shift/reduce 解析器。

您使用给定语法绘制的语言可能确实是用 Chomsky class 3 语法指定的,因此可以用常规语法生成。然后,用正则表达式解析。

关于寄存器是什么以及是否有更多关键字,规范有点不清楚。尤其是ecall不清楚。

但是如何构建这样的正则表达式?

您将定义小标记并将它们连接起来。而不同的路径可以用or操作符实现|.

让我们举个例子。

  • 一个寄存器可能与a\d+匹配。因此,“a”后跟一些数字。如果它不仅是“a”,还有其他字母,你可以使用 [a-z]\d+
  • 参数个数相同的操作码可以用简单或|列出。就像 add|sub
  • 空间有很多解决方案。您可以使用 \s+[ ]+ 或您需要的任何空格。
  • 要构建一个规则,您可以将到目前为止所学的内容串联起来
  • 有不同的部分需要一个或 | 作为完整路径
  • 如果你想找回匹配的组,你必须把需要的东西放在括号里

因此,许多可能的解决方案之一可以是:

^[ ]*((add|sub)[ ]+(a\d+)[ ]*,[ ]*(a\d+)[ ]*,[ ]*(a\d+)|(ecall))[ ]*$

参见示例:regex101