PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Loops: Regex mit Positionsangabe (https://www.php-resource.de/forum/php-developer-forum/79556-loops-regex-mit-positionsangabe.html)

chri91 22-12-2006 18:10

Loops: Regex mit Positionsangabe
 
hi

ich schreibe gerade so eine art parser für loops (schleifen). darin soll eben ein markierter bereich wiederholt werden, z. b.:
Code:

Das ist ein... {LOOP<}Text {>LOOP}
"Text" soll 10 mal wiederholt werden. Da könnte aber auch etwas anderes stehen. es geht eben darum, das der parser die stelle erkennt und den loops ausführt. der parser soll den text von anfang bis ende "durchparsen". es gibt nämlich noch ein paar andere sachen im parser, für die die reihenfolge wichtig ist. also einfach den text ersetzen wäre nicht sinnvoll.

am besten ist es, wenn der parser den muster mit einem regulären ausdruck erkennt ({LOOP<}Text {>LOOP}) und dann die entsprechende position im text zurückgibt, also z. b. "der text {LOOP<}Text {>LOOP} bedindet sich bei zeichen 10 bis zeichen 29".

wie kann ich sowas in php machen?

jmc 22-12-2006 22:17

z.B. so wenn du eine einfache Variante möchtest:
preg_replace("/\{LOOP<\}(.*?)\{>LOOP\}/","$1$1$1$1$1$1$1$1$1$1",$string)

Das wäre das einfache Ersetzen. Warum ist das in deinem Fall nicht sinnvoll?
Wenn du eine andere Variante möchtest wäre es gut, wenn du dein Problem ein bisschen genauer beschreiben würdest.

chri91 22-12-2006 23:17

ich vereinfache das beispiel mal. also der parser macht folgendes. aus dem z. B.:
Code:

Text 1 Text 1 Text 1 Text 1 Text 1 [LOOP]Wiederholung 1 Wiederholung 1 [VAR:titel] Wiederholung 1[/LOOP]Text 2 Text 2
soll das werden:
PHP-Code:

Array
(
    [
TEXT_1] => Text 1 Text 1 Text 1 Text 1 Text 1 
    
[LOOP_1] => Array
        (
            [
TEXT_2] => Wiederholung 1 Wiederholung 1
            
[VAR_1] => titel
            
[TEXT_3] => Wiederholung 1
        
)

    [
TEXT_4] => Text 2 Text 2


das template wird eingelesen und die strukturen (loop, var) sollen nacheinander in das array eingespeist werden.

ich denke das geht am besten mit einem regex. damit die strukturen aber in der richtigen reihenfolge im array stehen, muss der parser den string ja von anfang bis ende "durchparsen", damit die verschachtelungen ([LOOP]..[/LOOP]) berücksichtigt werden.

wie kann ich sowas machen?

3DMax 24-12-2006 01:37

Re: Loops: Regex mit Positionsangabe
 
Zitat:

Original geschrieben von chri91
am besten ist es, wenn der parser den muster mit einem regulären ausdruck erkennt ({LOOP<}Text {>LOOP}) und dann die entsprechende position im text zurückgibt, also z. b. "der text {LOOP<}Text {>LOOP} bedindet sich bei zeichen 10 bis zeichen 29".

wie kann ich sowas in php machen?
positionen kanst du mit strpos() herausfinden.
per regex würde ich preg_match_all() bevorzugen


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:01 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG