$re = '/^(?<numberExpression>(?<numberDice>[0-9]+)(?<gaussExpression>[oO]?(?<gaussDices>[0-9])+(?<gaussModifier>[\+\-])?)?)?[dD](?<faces>[0-9]+)(?<exploding>[¡!]{0,2})(?<modifierExpression>[\+\-](?<modifierValue>[0-9]+))?(?<thresholdExp>:(?<thresholdValue>[0-9]+))?/m';
$str = 'Common dice:
1d2 (coin flip)
2d4
3d6
4d8
5d10
6d12
7d20
8d30
9d100
Gauss notation:
1o3d10 Basic notation
1o3+d10 Gauss with gauss-modifier
1o3-d10 Gauss with gauss-modifier
1o5d8 Gauss with other configurations
Exploding dice:
1d10! Exploding
1d10¡ Imploding
1d10!¡ Both, exploding and imploding
1d10¡! Another possible arrangement
1o3d10! Gauss exploding
Adding and substracting:
1d10+20
1d10-3
1o3d10+3 Gauss with modifiers
1o3d10!-3 Gauss with exploding dice and modifiers
Threshold:
1d10:6
1d10+2:8 Modifier and threshold
1d10!+1:8 Exploding, modifier and threshold
1o3+d10!+3:8 Gauss with gauss-modifier, exploding option, modifier and threshold';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php