|
|
|
preg_replace_callback и (множественные подмаски)*
|
|||
|---|---|---|---|
|
#18+
Некоторый html-код содержит спецтеги вида [имя_тега атр1=знач1 атр2=знач2 ... атрN = значN]. Необходимо: 1). распарсить эти теги в массив вида $tag[i]["name"]="имя_тега"; $tag[i]["attributes"]["атр1"]="знач1"; $tag[i]["attributes"]["атр2"]="знач2"; ... $tag[i]["attributes"]["атрN"]="значN"; где i - порядковый номер тега в тексте 2). выполнить замену этих тегов текстом, сформированным на основании имени тега и набора аргументов. Пусть этот текст формируется некоторой функцией spec_tag($name,$attributes), где $name - имя i-го тега, $attributes - список его атрибутов. Начинаю решать эту задачу при помощи preg_replace_callback: preg_replace_callback("/\[\s*(\w+)((\s+(\w+)=(\w+))*|\s*)\s*\]/","callb",$text) function callb($matches) { echo "<pre>"; print_r($matches); echo "</pre>"; } и обнаруживаю, что в функцию callb в качестве отдельных элементов массива $matches передаётся только последнее вхождение подмаски (\s+(\w+)=(\w+))* (элементы 4 и 5): Array ( [0] => [имя_тега атр1=знач1 атр2=знач2 атр3=знач3 атр4=знач4] [1] => имя_тега [2] => атр1=знач1 атр2=знач2 атр3=знач3 атр4=знач4 [3] => атр4=знач4 [4] => атр4 [5] => знач4 ) Можно ли (и тогда как) сделать, чтобы в виде отдельных элементов массива присутствовали все элементы множественной подмаски? Например так: Array ( [0] => [имя_тега атр1=знач1 атр2=знач2 атр3=знач3 атр4=знач4] [1] => имя_тега [2] => атр1=знач1 атр2=знач2 атр3=знач3 атр4=знач4 [3] => атр4=знач4 [4] => атр1 [5] => знач1 [6] => атр2 [7] => знач2 [8] => атр3 [9] => знач3 [8] => атр4 [9] => знач4 ) Или так: Array ( [0] => [имя_тега атр1=знач1 атр2=знач2 атр3=знач3 атр4=знач4] [1] => имя_тега [2] => атр1=знач1 атр2=знач2 атр3=знач3 атр4=знач4 [3] => атр4=знач4 [4] => Array( [0]=> атр1 [1] => знач1 [2] => атр2 [3] => знач2 [4] => атр3 [5] => знач3 [6] => атр4 [7] => знач4 ) ) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2013, 10:37 |
|
||
|
|

start [/forum/topic.php?fid=23&tid=1464171]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
228ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 525ms |

| 0 / 0 |
