Я впервые использую регулярные выражения и у меня возникают некоторые проблемы.
Я пишу простую программу компиляции, и сейчас я работаю над модулем "синтаксического анализа", который занимаетстрока ассемблера и разбивает ее на части.
Некоторая часть строки может состоять из одного из этих выражений:
String comp = "[(0)(1)(-1)(D)(A)(!D)(!A)(-D)(-A)(D+1)(A+1)(D-1)(A-1)(D+A)(D-A)(A-D)(D&A)(D|A)(M)(M+1)(M-1)(D+M)(D-M)(M-D)(D&M)(D|M)]";
Итак, сейчас я просто хочу посмотреть, какое выражение соответствует следующемурегулярное выражение, потому что это то, что мне сейчас нужно.
Компилятор Java не компилирует такое выражение и пишет, что:
Недопустимый диапазон символов рядом с индексом 46 [(0) (1) (- 1) (D) (А) (D), (А) (-! D) (- А) (D + 1) (А + 1) (Д-1) (А-1) (Д+ А) (DA), (AD), (D & A), (D | А) (М) (М + 1) (М-1) (Д + М) (ДМ) (MD), (D & M), (Д | М)]
Я пытался сделать это так:
String comp = "[(0)(1)(\\-1)(D)(A)(!D)(!A)(\\-D)(\\-A)(D+1)(A+1)(D\\-1)(A\\-1)(D+A)(D\\-A)(A-D)(D&A)(D|A)(M)(M+1)(M\\-1)(D+M)(D\\-M)(M\\-D)(D&M)(D|M)]";
Это делает программу компилируемой, но она находит совпадение для строк типа "D" или "1", но не для«D + 1» или «D-1», в чем проблема и как ее исправить?