$re = '/(?:^(?:(\d+)\')?(?:[-| ]*)(?:(\d*(?: ?\d+\/\d+)?|(?:\d*\.\d+)?)?")?$)/mi';
$str = '5\'-2 1/2"
5\' -2 1/2"
5\' 4 2/3"
5\'-4"
5\'3 1/4"
4"
1/8"
5\'-3.25"
5\' 3.25"
5\'3.25"
3.25"
.25"
345\'-12.318"';
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