phpbar.de logo

Mailinglisten-Archive

[php] Regular Expressions 1 oder 2 Ergebnisse

[php] Regular Expressions 1 oder 2 Ergebnisse

Yannik Hampe yannik at cipher-code.de
Mit Mai 9 09:33:54 CEST 2007



ANGEL Harald wrote:
>  
> Sebastian Mendel schrieb:
>> der oder-Operand '|' müsste in Klammern einschließlich der zu suchenden Strings,
>> '#\(?:[Bild:([0-9]+)\]|\[Bild:([0-9]+),([0-9]+)\])#';
> 
> Hallo Sebastian, danke noch mal für deine Hilfe und sry, weil ich ein so altes Thema noch mal aufgreife, aber:
> Das mit den Klammern hab ich verstanden, aber deine "vereinfachte" Form nicht ganz:
>> '#\[Bild:([0-9]+)(?:,([0-9]+))?\]#';
> 
> Ich hab jetzt nämlich beim editieren das gleiche Problem:
> Der Tag kann diese 4 Aussehen haben:
> <img src='bild.jpg' id='21' />
> <img src='bild.jpg' id='21' style='width:100px;' />
> <img src='bild.jpg' id='21' style='height:200px;' />
> <img src='bild.jpg' id='21' style='width:100px;height:200px;' />
> 
> Ich hab da jetzt einen mir scheint ziemlich umständlichen weg:
> 
> $search = "#<img src='(.*)' id='([0-9]+)' style='(?:width:([0-9]+)px;|height:([0-9]+)px;|width:([0-9]+)px;height:([0-9]+)px;)' />#";
> 
> Das funktioniert zwar, aber die weite und höhe steht dann immer an unterschiedlichen Stellen im Array.
> Kann man das hübscher hinbekommen?

Schöner schneller und toller wäre so:

<?php
$qt ="
<root>
<img src='bild.jpg' id='21' />
<img src='bild.jpg' id='21' style='width:100px;' />
<img src='bild.jpg' id='21' style='height:200px;' />
<img src='bild.jpg' id='21' style='width:100px;height:200px;' />
</root>
";
function startElement($parser, $name, $attrs)
{
  if ($name !='img') return;
  print_r($attrs);
}

function endElement($parser, $name)
{
  //do nothing :-)
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
if (!xml_parse($xml_parser, $qt, true)) die(sprintf("XML error: %s at
line %d", xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
xml_parser_free($xml_parser);
?>

setzt lediglich vorraus, dass dein qt valides xml ist...
Bei dem Regex müsstest du fürchte ich damit leben, dass die an
verschiedenen Stellen im Array sind...
> 
> Danke!
> Harald

Yannik

php::bar PHP Wiki   -   Listenarchive