Ваше регулярное выражение не выполнено, поскольку оно перечисляет атрибуты в неправильном порядке.Шаблон соответствия не подходит для таких вещей (что было бы реальной причиной для предпочтения использования парсера DOM для таких целей.)
Экранирование \b
неуместно.И вы можете заключить два атрибута в (?: .. | .. )+
, чтобы допустить небольшую двусмысленность:
$input = preg_replace('/(?:<div
(?: \s class="(.*?)"
| \s data-info="(.*?)" )+
[^>]*>)
(.*?)<\/div>/ix', "$3 class:$1 data-info:$2", $input);
Нумерация $ 1 $ 2 $ 3 отключена, и, возможно, вы хотите использовать именованные группы захвата в любом случае здесь.