Парсинг пользовательских тегов с PHP

Здесь есть несколько интересных ответов (errator esp.), Но для чего-то аналогичного разделению на других языках - что я и имел в виду в первоначальном вопросе - я остановился на этом:

IN="bla@some.com;john@home.com"
declare -a a="(${IN/;/ })";

Теперь ${a[0]}, ${a[1]} и т. Д., Как и следовало ожидать. Используйте ${#a[*]} для количества терминов. Или, конечно, повторить:

for i in ${a[*]}; do echo $i; done

ВАЖНОЕ ПРИМЕЧАНИЕ:

Это работает в тех случаях, когда нет места для беспокойства, что решило мою проблему, но может не решить вашу. В этом случае воспользуйтесь решением $IFS.

6
задан g00se0ne 29 July 2009 в 17:15
поделиться

4 ответа

Вы можете использовать регулярные выражения для соответствия вашим настраиваемым тегам.

$html // Your html

preg_match_all('/<module\s*([^>]*)\s*\/?>/', $html, $customTags, PREG_SET_ORDER);

foreach ($customTags as $customTag) {
 $originalTag=$customTag[0];
 $rawAttributes=$customTag[1];

 preg_match_all('/([^=\s]+)="([^"]+)"/', $rawAttributes, $attributes, PREG_SET_ORDER);

 $formatedAttributes=array();

 foreach ($attributes as $attribute) {
  $name=$attribute[1];
  $value=$attribute[2];

  $formatedAttributes[$name]=$value;
 }

 $html=str_replace($originalTag, yourFunction($formatedAttributes), $html);
}

Если вы хотите использовать XML-подход, свяжитесь со мной, и я покажу вам, как это сделать.

9
ответ дан 8 December 2019 в 13:01
поделиться

http://us3.php.net/manual/en/function.preg-replace-callback.php

Мой партнер проделал работу с синтаксическим анализом тегов ... в зависимости от сложности, которую вы хотите достичь, вы можете использовать регулярное выражение. Используйте регулярное выражение для поиска тегов, а затем вы можете разделить строки дальше с помощью функций управления строками по своему усмотрению. Функция обратного вызова в preg_replace_callback позволит вам заменить тег любыми данными html, которые вы хотите, чтобы он представлял. Ура!

править: (<модуль +? ([^ =] +? = "[^"] *? "?) ? ? />) Это должно соответствовать функциям модуля ... удалите пробел между <и модулем (SO неправильно его разбирает). В пользовательской функции сопоставьте отдельные параметры, содержащиеся в теге, используя регулярное выражение, например: ([^ =] +? = "[^"] ? ")

3
ответ дан 8 December 2019 в 13:01
поделиться

Вы можете проанализировать свой файл с помощью simplexml и получить атрибуты после итерации и нахождения ваших элементов. Вот пример .

3
ответ дан 8 December 2019 в 13:01
поделиться

Как предположил Натсо , preg_replace_callback отлично подходит для этого типа решения.

Другой вариант - прочитать шаблон / файл как XML, если вы ожидаете проверки разметки xml, с помощью XmlReader и воздействовать на соответствующие узлы. В качестве дополнительного предложения вы можете использовать Пространства имен Xml для своих пользовательских тегов, так как это гарантирует отсутствие конфликтов.

2
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: