Seite 1 von 1
Hilfe bei regulären Ausdrücken ;)
Verfasst: 29.12.2005 12:37
von Gast210225
Hallo,
ich kenn mich mit regulären Ausdrücker leider fast nicht aus, aber ich denke mein Problem kann man mit so einem regulären Ausdrück lösen

Also, hier mein Problem:
ich hab eine Variable:
$var = '
Meine variable
<!-- START block -->
Hallo du! Wie gehts
<!-- END block -->
hier gehts weiter in der Variable...
';
Und ich möchte den Text, der zwischen dem <!-- START block --> und dem <!-- END block --> steht in einer neuen Variable haben....
Wie kann ich das machen?
Danke schon mal,
Johannes
Verfasst: 29.12.2005 13:01
von S2B
Wenn solch ein Block nur einmal vorkommt, könntest du es so machen:
Code:
Code: Alles auswählen
preg_match('#<!-- START block -->\n(.*?)\n<!-- END block -->#', $var, $results);
$results ist dann ein Array, das den gefundenen Text enthält.
Wenn mehrere Blöcke vorkommen sollten, musst du anstatt preg_match() preg_match_all() verwenden.
Verfasst: 29.12.2005 13:13
von Gast210225
Hallo,
danke
aber dein Code geht nur, wenn das zwischen dem "<!-- START block -->" und dem "<!-- END block -->" genau eine Zeile lang ist, wenn dazwischen 2 Zeilen sind, dann ist das Array leer....
Kann man das ändern?
Johannes
Verfasst: 29.12.2005 15:55
von S2B
Code: Alles auswählen
preg_match('#<!-- START block -->\n(.*?)\n<!-- END block -->#s', $var, $results);

Verfasst: 30.12.2005 19:41
von Gast210225
ok, danke

nun habe ich aber noch ein Problem:
ich habe eine navigation.xml:
Code: Alles auswählen
<?xml version="1.0" standalone="yes" encoding="UTF-8"?>
<navigation>
<item>
<name>Index</name>
<link>./</link>
</item>
<item>
<name>Was ist ein CMS?</name>
<link>./was-ist-ein-cms.html</link>
</item>
</navigation>
diese lese ich in eine Variable ein:
Code: Alles auswählen
$navigation_source = file_get_contents($path . 'content/navigation.xml');
Nur wie bekomme ich nun die einzelnen "<item>"-Blöcke?
So hab ich es schon probiert:
Code: Alles auswählen
preg_match_all('/<item>(.*)<\/item>/s', $navigation_source, $results);
aber das passt anscheinend nicht so ganz...
Hier die Ausgabe von "print_r($results);":
Code: Alles auswählen
Array
(
[0] => Array
(
[0] => <item>
<name>Index</name>
<link>./</link>
</item>
<item>
<name>Was ist ein CMS?</name>
<link>./was-ist-ein-cms.html</link>
</item>
)
[1] => Array
(
[0] =>
<name>Index</name>
<link>./</link>
</item>
<item>
<name>Was ist ein CMS?</name>
<link>./was-ist-ein-cms.html</link>
)
)
kann mir da nocheinmal jemand helfen?
Viele Grüße,
Johannes
Verfasst: 30.12.2005 21:04
von S2B
Versuch mal .*? anstatt .*

Verfasst: 31.12.2005 09:37
von Gast210225
Danke, es geht super

Nur nocheine Frage, was bewirkt das "?" ?
Verfasst: 31.12.2005 11:10
von S2B
Die normalen Quantifier (?, *, +) werden als "gierig" bezeichnet, da sie den größt möglichen Text festhalten wollen. Wenn man an diese Quantifier ein ? hängt, werden sie zu "minimalen" Quantifier, die den kleinst möglichen Text festhalten.
