string: { DWORD cbTotal = (sizeof(IMAGE_DOS_HEADER) + sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER) + sizeof(DETOUR_SECTION_HEADER) + sizeof(DETOUR_SECTION_RECORD) + cbData); PBYTE pbBase = (PBYTE)VirtualAllocEx(hProcess, NULL, cbTotal, MEM_COMMIT, PAGE_READWRITE); matches: Array ( [0] => Array ( [0] => Array ( [0] => { DWORD cbTotal = (sizeof(IMAGE_DOS_HEADER) + sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER) + sizeof(DETOUR_SECTION_HEADER) + sizeof(DETOUR_SECTION_RECORD) + cbData); [1] => 0 ) ) ) i ommited the subpatterns matches string2: { PBYTE pbBase = (PBYTE)VirtualAllocEx(hProcess, NULL, cbTotal, MEM_COMMIT, PAGE_READWRITE); matches2: Array ( [0] => Array ( [0] => Array ( [0] => { PBYTE pbBase = (PBYTE)VirtualAllocEx(hProcess, NULL, cbTotal, MEM_COMMIT, PAGE_READWRITE); [1] => 0 ) ) ) search string: if (preg_match_all('/[;{}](\s*)([\w_]+)([\s\*]+)([\w_]+)(\s*\[(\d*)\])?(\s*=\s*.*?)?\s*;/s', $func, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE) > 0) { print_r($matches);