$re = '/(?P<time>\d\d:\d\d:\d\d.\d{3})\s(?P<date>\d\d/\d\d/\d\d)\s(?P<sno>\d{10})\s(?P<status>\w{1,2}).*?-\s*(?P<bcode>No_barcode|\W{20})(?:\s+(?P<type>\w{3})(?:.*?(?P<pr>Pt.*?\d*[.]?\d*\s[a-z]+)(?:\s{1,3}(?P<fl>FL.*?\d*[.]?\d*\s[a-z]+))?)?)?/m';
$str = '95031B2 R C01 N1 P93 R-- 12:39:18.540 08/05/20 0000002802 R - No_barcode FLC F LR 7.673353 sccm Pt 25.288202 psig FL 536.651917 sccm EDC 0.000000 sccm PQ 7.668324 sccm QF 536.289246 sccm QP 25.287605 psig LLQ -0.109524 sccm HLQ 4.440174 sccm CLF 1.429953 sccm MF 0.000000 sccm LF 100.000015 sccm MQF 0.000000 sccm LQF 100.000015 sccm FPR 25.290846 psig
5102060 R C01 N1 P93 R-- 12:38:52.140 08/05/20 0000002801 FO - No_barcode
';
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