使用正则表达式匹配字符串中具有多个可能位置的元素

时间:2011-08-06 09:26:51

标签: regex

我正在制作一个接受表达式的骰子滚轮,以便处理用户要求的滚动。

表达式CAN采用这种形式(最长):2d8(*2)(+20)[reroll=1]。 我想做的是一个正则表达式,它将检查表达式是否结构良好,我已经做过:

/^(\d+d\d+(\([\*]\d+\))?(\([\+]\d+\))?(\[reroll(>|=|<)\d+\])?[\+$]){1,}/

问题是,我希望该正则表达式也匹配一个将括号/括号部分混合的表达式。 以下是我希望正则表达式匹配的表达式,同时保持表达式的每个部分兼容(除了2d8部分)。

2d8(+20)(*2)[reroll=1]
2d8(*2)(+20)[reroll=1]
2d8(+20)[reroll=1](*2)
2d8(*2)[reroll=1](+20)

有没有办法做我想做的事情而不需要做太多重复的正则表达式。

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

由于roll的语法相当复杂,为什么不编写解析器而不是使用庞大的正则表达式呢?