【发布时间】:2019-02-14 13:16:29
【问题描述】:
我正在开发一个涉及用户输入骰子表达式的 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”这样的表达式。对此创建正则表达式的任何帮助将不胜感激。
【问题讨论】:
-
这听起来或在我看来不像正则表达式是这里的方法。编写一小包 dice 和相关的解析类,当您返回代码进行维护或扩展时,您将更容易理解代码。
-
同意@daniu - 这听起来像是DSL,而不是正则表达式。