Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将字符串中具有多个可能位置的元素与正则表达式匹配_Regex - Fatal编程技术网

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

Regex 将字符串中具有多个可能位置的元素与正则表达式匹配,regex,Regex,我目前正在开发一个骰子辊,它接受表达式,以便处理用户要求的骰子辊 表达式可以采用以下形式(最长):2d8(*2)(+20)[reroll=1]。 我想做的是一个正则表达式,它将检查表达式是否结构良好,我已经做了: /^(\d+d\d+(\([\*]\d+\))?(\([\+]\d+\))?(\[reroll(>|=|<)\d+\])?[\+$]){1,}/ 有没有一种方法可以做我想做的事情,而不用做一个重复太多的很长的正则表达式 谢谢你的回答。由于滚动的语法相当复杂,为什么不编写一

我目前正在开发一个骰子辊,它接受表达式,以便处理用户要求的骰子辊

表达式可以采用以下形式(最长):
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)