Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Несколько совпадений?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Неработаван
Viper
Отправлено: 29 Ноября, 2014 - 22:17:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Есть такое
CODE (htmlphp):
скопировать код в буфер обмена
  1. {accordion header="Maecenas tempor"}Lorem ipsum{/accordion}


Есть регуль
CODE (htmlphp):
скопировать код в буфер обмена
  1. '#{accordion([\s| ]header="(.+?)")?([\s| ]open="(.+?)")}(.*){\/accordion}#is'


В таком формате регулярка не работает. Т.е. если header нет, то и совпадения нет, а атрибутов может быть много, а может и не быть, да и ещё в разном порядке.

Кто спец по регуляркам? А то не моё это Растерялся


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2014 - 22:54:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Чуть более универсальный вариант:
#\{([a-z]++)([^}]*+)\}(.*?)\{\/\\1\}#is
А потом уже разбирать параметры отдельной простой регуляркой, если таковые есть. Это будет проще, короче и удобнее.
Кстати, если пробелы заменить на PHP_EOL, то параметры легко и быстро должна будет parse_ini_string прочитать


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2014 - 22:58:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match('/\{(?<name>\w+)(?<attrs>[^\}]*)\}(?<content>[^\{]*)\{\/\\1\}/', $str, $m);
  2. preg_match_all('/(?<name>\w+)="(?<value>[^"]+)"/', $m['attrs'], $attrs);
  3.  
  4.     $m['name'],
  5.     $m['content'],
  6.     $attrs['name'],
  7.     $attrs['value']
  8. );
 
 Top
Viper
Отправлено: 01 Декабря, 2014 - 20:04:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Мелкий сделал. Но есть одно но. Косяк с вложенными тегами Улыбка

CODE (htmlphp):
скопировать код в буфер обмена
  1. {accordion header="Maecenas tempor"}
  2. Lorem ipsum
  3.         {accordion header="Maecenas tempor"}Lorem ipsum{/accordion}
  4. {/accordion}

Приводит к бяке.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Мелкий Супермодератор
Отправлено: 01 Декабря, 2014 - 20:28:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 01 Декабря, 2014 - 20:54:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Viper пишет:
Приводит к бяке.
Wow! А почему бы не заменить {} на <> и не запарсить это как XML? Что в пхп что в жс есть возможность преобразовать в объектную модель которую уже и по вложениям проще будет разгрести.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB