Блоки контента новостей и пользовательские регулярные выражения - PullRequest
0 голосов
/ 21 июля 2011

Мне нужно создать небольшое средство для создания статьи новостей для моих редакторов с помощью программного обеспечения php. Я создал способ использовать пользовательский блок и модуль, чтобы помочь редакторам включать статические или динамические блоки и модули, просто включив их в текст:

Пример:

Lorem Ipsum Dolor Sit Amet, Concetetur Adipiscing Elit. Этим в Моллис Либеро. Phasellus sollicitudin ligula pharetra magna egestas mattis. {block name = "ads1"} Aenean lacinia lacinia sapien nec fermentum. {имя модуля = "thename" class = "Thelist" метод = "Показать" параметр1 = "первый параметр" параметр2 = "второй параметр" параметр3 = "третий параметр"} Donec ligula lectus, egestas et molestie ac Tristique ID Mi. Donec sed scelerisque leo.

Я использую два регулярных выражения:

  1. $ex = preg_match_all("/{((?:module|block).*?)}/sm", $text, $matches);
  2. preg_match_all ( '/^{module\s+|\G(name|class|method)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?=}$))/i', $module, $matches );

Первый получает все элементы в новостной статье. Второй разделяет каждый блок и модули в массиве.

Вопрос: Второе регулярное выражение не получает все параметры, а только один! Мне нужно получить все параметры, которые редактор пишет в содержании новостной статьи.

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Может быть, попытаться сделать это в 2 шага

1, чтобы найти все модули

preg_match_all( '(.*{module(.+)}.*)Ui', $module, $matches );

или

preg_match_all( '(.*{(module|block)(.+)}.*)Ui', $module, $matches);

2, чтобы найти параметры для каждой модели / блока

preg_match_all ( '(([a-zA-Z0-9]+)=\"(.+)\")Ui', $module, $matches );
1 голос
/ 21 июля 2011

Вы их не ищете.

^{module\s+|\G(name|class|method|parameters)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?=}$))
                                          ^

Вы ищете термин parameters, за которым следует =, но его не существует. Вы назвали их parameter1 и так далее. Так что измените на

^{module\s+|\G(name|class|method|parameter\d+)=("[^"]+"|\'[^\']+\'|\S+)(?:\s+|(?=}$))

должен вам помочь.

...