$re = '/(##[^\n]*\n)|(\((CR|CL) \d+\)) ((RM|SM) [0-9]:)|([a-zA-Z]+!?(?: [a-zA-Z]*!?)*)/m';
$str = '## (Chat room 1) Received message from client 1: Nice to meet you!
(CR 1) RM 1: Nice to meet you!
(CR 1) SM 1: Nice to meet you!
## (Client 1) Received message from client 1: Nice to meet you!
(CL 1) RM 1: Nice to meet you!
(CR 0) SM 3: Nice to meet you!
## (Client 3) Received message from client 3: Nice to meet you!
(CL 3) RM 3: Nice to meet you!';
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