$re = '/[*][(][\s]*[(\s]*.*[*][)\s]*(.*)\s*[)]\s*=(.*)[\s]*;/ix';
$str = ' (*((volatile unsigned short*)(type01_01_06_base + (type01_01_06_offset * 1))) = (unsigned short)(unsigned long)0x01010101);
(*((volatile unsigned short*)(type01_01_06_base + (type01_01_06_offset * 2))) = (unsigned short)(unsigned long)0x01000100);
(*((volatile unsigned char*)add)) = (unsigned char)data;
(*((volatile unsigned short*)add)) = (unsigned short)data;
(*((volatile unsigned long*)add)) = (unsigned long)data;
*((volatile unsigned char*)0x01010004) = (unsigned char)0x01;
*((volatile unsigned char*)0x01010008) = (unsigned char)0x00;
*((volatile unsigned short*)0x01020004) = (unsigned short)0x0100;
*((volatile unsigned short*)0x01020008) = (unsigned short)0x0000;
*((volatile unsigned long*)(0x01030000 + 0x04)) = (unsigned long)0x00010000;
*((volatile unsigned long*)(0x01030000 + 0x08)) = (unsigned long)0x00000000;
(*((volatile unsigned char*)type01_01_04o_add) = (unsigned char)(unsigned char)0xA5);
(*((volatile unsigned char*)type01_01_04n_add) = (unsigned char)(unsigned char)0x5A);
(*((volatile unsigned short*)(type01_01_05_base + type01_01_05o_offset)) = (unsigned short)(unsigned short)0x0101);
(*((volatile unsigned short*)(type01_01_05_base + type01_01_05n_offset)) = (unsigned short)(unsigned short)0x0100);
*((volatile unsigned char*)0x02010004) = (unsigned char)0x04;
*((volatile unsigned char*)0x02010008) = (unsigned char)0x05;
*((volatile unsigned short*)0x02020004) = (unsigned short)0x0400;
*((volatile unsigned short*)0x02020008) = (unsigned short)0x0500;
*((volatile unsigned long*)0x02030004) = (unsigned long)(0x00030000 + 0x00010000);
*((volatile unsigned long*)0x02030008) = (unsigned long)(0x00030000 + 0x00020000);
(*((volatile unsigned char*)0x02040004) = (unsigned char)(unsigned char)(0x0A - 0x02));
(*((volatile unsigned char*)0x02040008) = (unsigned char)(unsigned char)(0x0A - 0x01));
(*((volatile unsigned short*)0x02050004) = (unsigned short)(unsigned short)(0x0001 << 11));
(*((volatile unsigned short*)0x02050008) = (unsigned short)(unsigned short)(0x0001 << 12));
(*((volatile unsigned long*)0x02060004) = (unsigned long)(unsigned long)(0x80000000 | 0x00080000));
(*((volatile unsigned long*)0x02060008) = (unsigned long)(unsigned long)(0x80000000 | 0x00800000));
';
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