[Dresden-pm] Regex-Frage

Christian Exner exner at webit.de
Don Jan 8 06:46:50 CST 2004


hi,

> ich habe ein XML-Fragment:
> <Zubehoer>
>                 <Item>
>                         <Artikelnummer>1234-567</Artikelnummer>
>                         <Gruppe>Ram</Gruppe>
>                         <Position>1</Position>
>                         <Flag>ist</Flag>
>                 </Item>
>                 <Item>
>                         <Artikelnummer>1234-567</Artikelnummer>
>                         <Gruppe>Ram</Gruppe>
>                         <Position>1</Position>
>                         <Flag>ist</Flag>
>                 </Item>
> [..]
>         </Zubehoer>
>
> und will mittels Regex alle Items in ein Array lesen.
> Mein Ansatz:
> @item = ($xsell =~  /(<Item>.*<\/Item>)/s);
>
> matcht mir alles zwischen dem ersten und dem letzten Item auf einmal.
> Wie kann ich das ändern?

du musst warscheinlich nur die "greedyness" deines .* konstruktes ändern 
indem du ein fragezeichen hinter den stern setzt. damit hört es schon beim 
ersten vorkommen von </item> auf zu suchen und nicht beim letzten:

@item = ($xsell =~  /(<Item>.*?<\/Item>)/s);
-- 
exxi