$re = '`^\s+(?P<user>[\w[:print:]]+) [\w\-\.]+ [[:print:]]+ ?\(v[\w\.]+\) \([\w\-\.]+\/\d+ \d+\)\, start \w+ \d+\/\d+ \d+\:\d+(\,\s(?P<licenses>\d+)\s\w+|)(\s+\(linger\:\s\d+\s\/\s\d+\))?$`m';
$str = '
userone host01 :78 APS Base (v19.100) (licserver/27010 7401), start Thu 5/14 15:31, 2 licenses
userone host01 :78 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 7501), start Thu 5/14 15:31, 4 licenses
userone host01 :75 APS Base (v19.100) (licserver/27010 18901), start Thu 5/14 15:33, 2 licenses
userone host01 :75 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 19001), start Thu 5/14 15:33, 4 licenses
userone host01 :76 APS Base (v19.100) (licserver/27010 18702), start Thu 5/14 15:34, 2 licenses
userone host01 :76 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 17002), start Thu 5/14 15:34, 4 licenses
userone host01 :77 APS Base (v19.100) (licserver/27010 23302), start Thu 5/14 15:34, 2 licenses
userone host01 :77 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 23801), start Thu 5/14 15:34, 4 licenses
userone host01 :60 APS Base (v19.100) (licserver/27010 23901), start Thu 5/14 15:34, 2 licenses
userone host01 :60 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 24001), start Thu 5/14 15:34, 4 licenses
userone host01 :68 APS Base (v19.100) (licserver/27010 25501), start Thu 5/14 15:34, 2 licenses
userone host01 :68 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 25601), start Thu 5/14 15:34, 4 licenses
userone host01 :58 APS Base (v19.100) (licserver/27010 22803), start Thu 5/14 15:34, 2 licenses
userone host01 :58 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 27801), start Thu 5/14 15:34, 4 licenses
useronexr host01 :51 Spectre X Base (v19.100) (licserver/27010 61140), start Sat 5/16 13:41, 3 licenses
useronexr host01 :52 Spectre X Base (v19.100) (licserver/27010 31125), start Sat 5/16 13:43, 3 licenses
useronexr host01 :76 Spectre X Base (v19.100) (licserver/27010 53463), start Sat 5/16 13:47, 3 licenses
useronexr host01 :69 Spectre X Base (v19.100) (licserver/27010 41523), start Sat 5/16 13:47, 3 licenses
useronexr host01 :51 Spectre X Multi-core (Max. 16 cores) (v19.100) (licserver/27010 46233), start Sat 5/16 14:08, 6 licenses
useronex host01 :52 Spectre X Multi-core (Max. 16 cores) (v19.100) (licserver/27010 32328), start Sat 5/16 14:10, 6 licenses
useronex host01 :69 Spectre X Multi-core (Max. 16 cores) (v19.100) (licserver/27010 10953), start Sat 5/16 14:16, 6 licenses
useronex host02 :76 Spectre X Multi-core (Max. 16 cores) (v19.100) (licserver/27010 32114), start Sat 5/16 14:17, 6 licenses
useronexr host02 localhost:10 APS Base (v19.100) (licserver/27010 31935), start Sun 5/17 10:18, 2 licenses
useronexr host02 localhost:10 APS Multi-core (Max. 16 cores) (v19.100) (licserver/27010 6614), start Sun 5/17 10:21, 4 licenses
';
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