1

Nand-2-Tetris コースを受講しています。書き込みとアセンブラを求められます。C コマンドは、dest=comp;jump各部分がオプションのタイプです。

私はすべてを簡単にするために正規表現を書こうとしていました-特定の行で式をコンパイルし、グループ番号だけで、式のどの部分を使用しているかを知りたいです。たとえば、式の場合: A=M+1;JMPI want to get group(1) = A, group(2) = Mand group(3) = JMP.

私の問題は、各部分がオプションであるため、この正規表現の書き方が正確にわからないことです。これまでのところ、私は思いつきます:

(A?M?D?)\s=([^;\s]*)\s?(?=;[\s]*([a-zA-Z]{1,4})|$)

これはほとんどの場合に機能しますが、期待どおりには機能しません。たとえば、コンプがないと機能しません ( D;JGT)。私は前向きな先読みを試みましたが、うまくいきませんでした。

4

2 に答える 2

0

何をしたいのかよくわかりませんが、例に基づいて、次のような正規表現を作成できます。

([\w]+)[=]?([\w])*[+-]*[\w]*;([\w]+)

次に、その行について:

A=M+1;JMP

次のものが得られます。

Full match  A=M+1;JMP
Group 1     A
Group 2     M
Group 3     JMP

そしてその行について:

D;JGT

あなたは得るでしょう:

Full match  D;JGT
Group 1     D
Group 3     JGT

ここで例を参照してください: https://regex101.com/r/v8t4Ma/1

于 2016-10-02T14:01:26.450 に答える