Thema: jedes element finden

Hallo zusammen!

ich möchte folgende konstruktion mit regex (preg_match) abfragen:

<start>
      wert
</start>
<start>
      wert
</start>

der ausdruck soll alles zwischen <start> und </start> finden. macht er soweit auch, allerdings zwischen den äußeren. wie bekomm ich's hin, das er jedes element angeht??

Netigo GmbH
Agentur für neuen Medien
http://www.netigo.de

2

Re: jedes element finden

Moin,

So könntest Du's machen:

 <?
 
 $q = "<start>
        wert1
       </start>
       <start>
        wert2
       </start>
       <start>
        wert3
       </start>
       <start>
        wert4
       </start>
      ";
 
 preg_match_all('/<start>(.+?)</start>/s', $q, $m);
 
 print '<pre>';
 print_r( $m[1] );
 print '</pre>';
 ?>
 

gruß

matho

Re: jedes element finden

das klappt, danke! aber könntest du mir das evtl noch aufschlüsseln?

. jedes zeichen außer umbruch
+ mindestens ein zeichen

aber was macht das "?"?
und wa macht die option "s" am ende

...und warum zur hölle finde ich das im php-manual nicht?!?!?

Netigo GmbH
Agentur für neuen Medien
http://www.netigo.de

4

Re: jedes element finden

Wide:

Guck mal unter:
http://de.php.net/manual/de/pcre.pattern.modifiers.php
und
http://de.php.net/manual/de/pcre.pattern.syntax.php

das steht sehr wohl in der Doku <img src="/forum/images/graemlins/wink.gif" alt="" />

MfG, tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

5

Re: jedes element finden

Tach Wide,

wie Tink schon sagte:

das ? macht das + 'ungreedy', also nicht ganz so gefrässig.
Nimm's einfach mal raus und gugg Dir den Unterschied an.
Das s bedeutet, daß . nun auch auf newlines anspricht.

Alle Klarheiten beseitigt?

gruß

matho

Re: jedes element finden

was die klarheiten angeht, verweigere ich jegliche aussage! *g*

aber ich hab noch was zu klären:
warum legt der schlonz mir das array direkt in 2 dimensionen an?
ist zwar nicht schlimm, aber mir würde eine reichen!!
$m[0] anstatt $m[0][0]

P.S. die doku ist mir übrigens bekannt, aber wenn ich damit zurecht kommen würde, hätt ich ja nicht gepostest! nix für ungut!!! *g*

Netigo GmbH
Agentur für neuen Medien
http://www.netigo.de

7

Re: jedes element finden

sowieso nix für ungut - der Hinweis auf die doku
stammt nicht von mir...

Mach mal folgendes:

 print '<pre>';
 print_r( $m );
 print '</pre>';
 

und schau Dir den Quelltext der Browserausgabe an.

Dann wirst Du sehn, daß $m[0] Deine start-tags mitbeinhaltet, also das gesamte matching.
$m[1] fängt den geklammerten Ausdruck, den Du haben
wolltest ("...alles zwischen..."), ein.

gruß

matho

Re: jedes element finden

alles klar. danke!

da fällt mir gerade ein, ich hab noch ne kleinigkeit *g*:

kann ich den teil <start> auch noch so bescheiben, das groß- und kleinschreibung NICHT berücksichtig wird?

Netigo GmbH
Agentur für neuen Medien
http://www.netigo.de

9

Re: jedes element finden

Am einfachsten so:

preg_match_all('/<start>(.+?)</start>/is', $q, $m);

und nochen gruß

matho

10

Re: jedes element finden

Alles supaaaaaa, danke!!!

Netigo GmbH
Agentur für neuen Medien
http://www.netigo.de