hi
I want to create a custom code and read the attributes.
[img src="img.png" width="11" alt="adsfafsd"]
how would i create a regex that recognizes it and gives me the attributes in an array?
Thanks in advance.
Peanuts
| SitePoint Sponsor |




hi
I want to create a custom code and read the attributes.
[img src="img.png" width="11" alt="adsfafsd"]
how would i create a regex that recognizes it and gives me the attributes in an array?
Thanks in advance.
Peanuts
the neigbours (free) WIFI makes it just a little more fun

Do you mean with attribute names as keys?
PHP Code:$result['src']= "img.png";
$result['width'] = "11"; // string or integer or not bothered?
$result['alt'] = "adsfafsd";

Shame you are not starting with an xml-friendly string (eg xHTML):
PHP Code:$input = '<img src="img.png" width="11" alt="adsfafsd" />';
$out = simplexml_load_string($input);
var_dump($out);
// gives
object(SimpleXMLElement)[1]
public '@attributes' =>
array
'src' => string 'img.png' (length=7)
'width' => string '11' (length=2)
'alt' => string 'adsfafsd' (length=8)




thanks so far.
I can't use the xml codes i did look into it but there are constraints ;(
yeah the second post about the results is spot on. i'm not worried about datatypes i can manage that after it's in the array.
the neigbours (free) WIFI makes it just a little more fun
Could you try the following code?
PHP Code:$s = '[img src="img.png" width="11" alt="adsfafsd"] test [img src="img.jpg" width="22" alt="hi"]';
$pattern = '#\[img([^\]]+)\]#si';
if (preg_match_all($pattern, $s, $m))
{
$pattern = '#(\w+="[^"]+")#i';
$attributes = array();
foreach($m[1] as $m1)
{
if (preg_match_all($pattern, $m1, $attrm))
{
foreach($attrm as $v)
{
$tmp = array();
foreach($v as $vv)
{
$t = explode("=", $vv);
$tmp[trim($t[0])] = str_replace('"', '', $t[1]);
}
}
$attributes[] = $tmp;
}
}
print_r($attributes);
}




although it looks good.. it's not working.
the neigbours (free) WIFI makes it just a little more fun




hi .. i've changed some of this.
and the first step is working the problem is that the second pattern isn't picking anything up. i want to find the different attributes. in now is 1 string with all the attributes.
Code:$pattern = '#\\[img([^\]]+)\]#smi'; if (preg_match_all($pattern, $content, $m)) { $pattern = '#(\w+\="[^\"]+\")#mi'; $pattern = '#\"(?:[^\\"]+|\\.)*#mi'; $attributes = array(); foreach($m[1] as $m1) { if (preg_match_all($pattern, $m1, $attrm)) { // there's nothing here.. foreach($attrm as $v) { $tmp = array(); foreach($v as $vv) { $t = explode("=", $vv); $tmp[trim($t[0])] = str_replace('"', '', $t[1]); } } $attributes[] = $tmp; } } print_r($attributes); }
the neigbours (free) WIFI makes it just a little more fun

Does the incoming string contain a single[*] tag, as in your first post, or does it contain multiples as in gvre's example in #5 above?




Not sure what you mean there.. the code I just posted is the latest i'm testing with ..
I marked the point that it's not getting too.
the neigbours (free) WIFI makes it just a little more fun
I had tested this code before I posted it here.
It matches one or more [img *] tags. Could you try it again?
Bookmarks