|
|
|
| Разбор параметров тега…
Есть вот такие строки….
//$source_str='<tag param1 = value1 param2 = value2 param3 =\’value3 \’ param4 = "value4 ">
//$source_str='tag param1 = value param2 = \'value .. \' param3 ="value .. .."';
//$source_str='<tag param="<...>..." param2=url7 param3=\'...\' param4="4...">';
//$source_str='<tag param=url8 param2="<...>..." >';
как- то нужно их разобрать в массив $ar[param]=’value’;
уже задолбался 4 дня ковыряя эти долбанные выражения !!!
Это вообще реально одним выражением сделать?!
ЗАРАНЕЕ БЛАГОДАРЮ ЗА ПОМОЩЬ! | |
|
|
|
|
|
|
|
для: Сергей Александрович
(05.04.2007 в 22:22)
| |
<?php
//$source_str='<tag param1 = value1 param2 = value2 param3 =\'value3 \' param4 = "value4 ">';
//$source_str='tag param1 = value param2 = \'value .. \' param3 ="value .. .."';
//$source_str='<tag param="<...>..." param2=url7 param3=\'...\' param4="4...">';
$source_str='<tag param=url8 param2="<...>..." >';
if ( $source_str[strlen($source_str) - 1] == ">" )
$source_str = substr($source_str, 0, strlen($source_str) - 1);
$patt = "/([A-z\d]+)\s*=\s*('|\")([A-z\d\<>\.\s]+)('|\")/";
preg_match_all($patt, $source_str, $m1);
preg_replace($patt, "", $source_str);
preg_match_all("/([A-z\d]+)\s*=\s*([A-z\d\<>\.]+)/", $source_str, $m);
$result = array();
if ( count($m[0]) !== 0 ) {
for ( $i = 0; $i < count($m[0]); $i++ ) {
$result[$m[1][$i]] = $m[2][$i];
}
}
if ( count($m1[0]) !== 0 ) {
for ( $i = 0; $i < count($m1[0]); $i++ ) {
$result[$m1[1][$i]] = $m1[3][$i];
}
}
print_r($result);
|
| |
|
|
|
|
|
|
|
для: Саня
(06.04.2007 в 18:46)
| | Спасибо, что уделили внимание моей проблеме.
А я все парился, пытался весь разбор одним выражением сделать…, но есть одно, “НО” при таком подходе я пишу: <tag param1=”xxx” param2=zzz param1=yyy>
По идее (по всем законам HTML) должно быть $result[param1]=’yyy’ а не тут то было….:)
параметры В КАВЫЧКАХ подклеиваются после параметров БЕЗ КАВЫЧЕК, и соответственно имеют над ними приоритет. А по идее приоритет должен иметь тот параметр который “позже стоит” в строке…
P.S./ кстати не как не пойму а зачем ЭТО: “preg_replace($patt,"",$source_str);” ??? | |
|
|
|
|
|
|
|
для: Сергей Александрович
(08.04.2007 в 02:24)
| | Вот, придумал попроще решение. С одним выражением.
<?php
//$source_str='<tag param1 = value1 param2 = value2 param3 =\'value3 \' param4 = "value4 ">';
//$source_str='tag param1 = value param2 = \'value .. \' param3 ="value .. .."';
//$source_str='<tag param1="<...>..." param2=url7 param3=\'...\' param4="4...">';
//$source_str='<tag param=url8 param2="<...>..." >';
$source_str = "<tag param1=\"xxx\" param2=zzz param1=yyy>";
$source_str = trim($source_str, "<>");
preg_match_all("/([a-z\d]+)\s*=\s*('[^']*'|\"[^\"]*\"|[a-z\d\.<>]+)/i", $source_str, $m);
for ( $i = 0, $result = array(); $i < count($m[0]); $i++ ) {
switch($m[2][$i][0]) {
case "'": $val = trim($m[2][$i], "'"); break;
case '"': $val = trim($m[2][$i], '"'); break;
default : $val = $m[2][$i];
}
$result[$m[1][$i]] = $val;
}
print_r($result);
|
> P.S./ кстати не как не пойму а зачем ЭТО: “preg_replace($patt,"",$source_str);” ???
Не обращайте внимания. Там ещё много плохих мест. | |
|
|
|
|
|
|
|
для: Саня
(08.04.2007 в 17:13)
| | Да мне до таких свежих мыслей наверно еще далеко :) ) )
ОГРОМНОЕ СПАСИБО!
P.s/ А о каких "плохих местах" идет речь..(какие тут подводные камни?:),?
Я в этом коде не чего плохого не увидел все вроде просто локонично и логично!:) ,
а preg_replace о котором я спрашивал выше в приведенном вами ранее коде (я так понимаю должен был вырезать все параметры "с кавычками" и отдать второму preg_match_all только те что без ковычек:) но у меня на локале этот preg_replace почемуто вообще не чего неменял в исходной строке (отдавал то же что и пришло)... еще раз спасибо! | |
|
|
|
|
|
|
|
для: Сергей Александрович
(08.04.2007 в 23:58)
| | > P.s/ А о каких "плохих местах" идет речь..(какие тут подводные камни?:),?
Ну например первый паттерн неправильно распарсит такой пример:
param = "some value 'in quotes' "
|
> а preg_replace о котором я спрашивал выше в приведенном вами ранее коде...
Был какой-то частный пример, который неправильно парсился, если не уничтожать параметры в кавычках.
Да и в целом некрасивость предыдущего примера сподвигла меня придумать что-нибудь другое, а не нагромождать кучу условий для отловки всяких частностей. Вот второй вариант мне нравится гораздо больше. | |
|
|
|
|
|
|
|
для: Саня
(09.04.2007 в 00:30)
| | Еще раз спасибо!:))) | |
|
|
|