preg_replace для собственных атрибутов в теге DIV - PullRequest
1 голос
/ 15 июня 2011

У меня быстрый вопрос о проблеме preg_replace, которая у меня есть.Я просто новичок в RegEx.Я хотел бы добиться следующего:

  • У меня есть тег DIV <div data-info="sourcefile.ext" class="elm swf">sourcefile</div>
  • Я хотел бы извлечь значение (data-info) и (class)значение
  • Могут быть необязательные теги, но мне не нужны значения этих атрибутов
  • Эта замена должна работать несколько раз в одной строке

У меня есть:

$input = '<div data-info="sourcefile.ext" class="elm swf">sourcefile</div>';
$input = preg_replace('/(<div\s(class="(.*?)")\s(data-info="(.*?)")\b[^>]*>)(.*?)<\/div>/i', "$1 class:$2 data-info:$3", $input);

Я хочу использовать значения как: <object src="(data-info)" type="(class)">

Возможно ли это?А может кто-нибудь показать / объяснить мне, как это работает?

Большое спасибо.

1 Ответ

0 голосов
/ 15 июня 2011

Ваше регулярное выражение не выполнено, поскольку оно перечисляет атрибуты в неправильном порядке.Шаблон соответствия не подходит для таких вещей (что было бы реальной причиной для предпочтения использования парсера DOM для таких целей.)

Экранирование \b неуместно.И вы можете заключить два атрибута в (?: .. | .. )+, чтобы допустить небольшую двусмысленность:

 $input = preg_replace('/(?:<div
     (?: \s class="(.*?)"
       | \s data-info="(.*?)"  )+
     [^>]*>)
     (.*?)<\/div>/ix', "$3 class:$1 data-info:$2", $input);

Нумерация $ 1 $ 2 $ 3 отключена, и, возможно, вы хотите использовать именованные группы захвата в любом случае здесь.

...