В настоящее время я немного играю с регулярными выражениями и хочу реализовать какие-то пользовательские теги для текстов на моем сайте. Например, если я хочу внедрить изображение в текст, я использую для этого следующий тэг скобок…
Lorem ipsum dolor sit amet (изображение: tiger.jpg ширина: 120 высота: 200 название: на этой картинке изображен тигр) sed diam nonumy eirmod tempor invidunt
Теперь я хочу, чтобы мой PHP-скрипт 1. находил эти теги скобок и 2. читал отдельные теги в этих скобках, поэтому я получаю какой-то массив, например…
$attributes = array(
'image' => 'tiger.jpg',
'width' => '150',
'height' => '250',
'title' => 'This picture shows a tiger',
);
Сложность (для меня) заключается в том, что «значения» могут содержать все, что угодно, если только они не содержат что-то вроде (\w+)\:
, потому что это начало другого тега. Следующий фрагмент представляет то, что у меня есть на данный момент — поиск элементов в скобках работает до сих пор, но разделение содержимого скобок на отдельные теги на самом деле не работает. Я использовал (\w+)
для сопоставления значения просто как заполнитель — это не будет соответствовать «tiger.jpg» или «На этом изображении изображен тигр» или чему-то еще. Я надеюсь, вы понимаете, что я имею в виду! ;)
<?php
$text = 'Lorem ipsum dolor sit amet (image: tiger.jpg width: 150 height: 250 title: This picture shows a tiger) sed diam nonumy eirmod tempor invidunt';
// find all tag-groups in brackets
preg_match_all('/\((.*)\)/s', $text, $matches);
// found tags?
if(!empty($matches[0])) {
// loop through the tags
foreach($matches[0] as $key => $val) {
$search = $matches[0][$key]; // this will be replaced later
$cache = $matches[1][$key]; // this is the tag without brackets
preg_match_all('/(\w+)\: (\w+)/s', $cache, $list); // find tags in the tag-group (i.e. image, width, …)
echo '<pre>'.print_r($list, true).'</pre>';
}
}
?>
Было бы здорово, если бы кто-нибудь мог помочь мне из этого! Спасибо! :)