You can search material: '; $search = '/(<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)(\s*<(?:lang|span) lang="[a-zA-Z0-9_-]*".*?>.+?<\/(?:lang|span)>)+/is'; $newtext = preg_replace_callback($search, 'multilangupgrade_impl', $text); print_object($text); print_object($newtext); function multilangupgrade_impl($langblock) { print_object($langblock); $searchtosplit = '/<(?:lang|span) lang="([a-zA-Z0-9_-]*)".*?>(.+?)<\/(?:lang|span)>/is'; preg_match_all($searchtosplit, $langblock[0], $rawlanglist); $return = ''; foreach ($rawlanglist[1] as $index=>$lang) { $return .= ''.$rawlanglist[2][$index].''; } return $return; } ?>