C ++中的正则表达式用于匹配某些模式
Regex in c++ for maching some patters
我想要这个的正则表达式。
- 添加 x2、x1、x0 是有效指令;
我想实现这个。但是有点困惑,因为我是使用 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
我想要这个的正则表达式。
- 添加 x2、x1、x0 是有效指令;
我想实现这个。但是有点困惑,因为我是使用 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