2016-08-06 4 views
1

Im работает в парсе анализаторов mips, используя yacc и lex, и мне нужно распознать регистры в данных инструкциях. Это регистры могут быть:Регуляторы MIPS regex

  • $t0,$t1,...$t31
  • $zero
  • r0,r1,...,r31
  • R0,R1,...,R31

Я попытался сделать первую часть ($t0,...,$t31 и R0,...$R31), но это не сработало. Моим регулярным выражением является (\$t|R)([1|2][0-9]|3[0-1]|[0-9]). Как видно из изображения 1, регулярное выражение соответствует R5 в регистре R56, и это нежелательно. Как я могу решить эту проблему?

Regex test from RegExr

+0

вам нужно слово-граница '\ b': - ** [' (\ $ t | \ bR) ([1 | 2] [0-9] | 3 [0-1] | [0-9]) \ b'] (https://regex101.com/r/rK6bA0/1) ** – rock321987

ответ

2

Я хотел бы использовать:

((?:\$t|[rR])(?:[12]?[0-9]|3[01]))\b|(\$zero) 

соответствовать:

  • $t или R или r с последующим числом от 0 до 32 (благодаря границе \b слова)
  • $zero

См. live demo.

 Смежные вопросы

  • Нет связанных вопросов^_^