Я работаю над проектом на Java, в котором пользователь вводит выражение для игры в кости. Я использую регулярное выражение для проверки ввода, чтобы убедиться, что это правильное выражение D & D. Я имею в виду, что такие выражения:
d20
2D12+ 4 - 2
12d4-2d6+7 + d8
7 + 1d12
Все будет в силе. В то время как выражения, подобные этим:
-2d6+4
-d8 - 5
12
2d0 + 5
1d6 + 0d2 - 1
0d6
Все будет недействительным.
Пока что мне удалось сделать следующее регулярное выражение:
^((((0+\d+|[1-9]\d*|)(d|D)(0+\d+|[1-9]\d*))|(\d+))((\ *(\+|\-)\ *)(?=(((0+\d+|[1-9]\d*|)(d|D)(0+\d+|[1-9]\d*))|(\d+))))?)+$
Однако это регулярное выражение по-прежнему соответствует выражениям типа "0d6". Любая помощь в создании регулярного выражения для этого будет высоко ценится.