Toon posts:

Preg_match Probleempie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi 2 All,

ik ben al een tijdje aan het spelen met preg_(match|replace), maar ik kom er niet echt uit. d'r zijn al aardig wat topics over geweest, maar ik kom er niet echt wijs uit, vandaar dat ik probleempje maar ff post :).

het probleem(voor mij dan 8)7) :
ik heb een $tpl waarin in HTML code staat met tags erin (d0h)
met uiteraard als al eerder is gezien [tmp]. nou wil ik die tags met [tmp] en [/tmp] eruit halen.
nou lukt DAT nog wel, maar hoe krijg ik dat goed voor elkaar als ze gestackt zijn??, dus [temp] blaat [temp] blaat blaat [/temp] blaterdeblaaterblaat [/temp].

en dan nog iets:
binnen die tags wil ik meer dan 1x een waarde door kunnen geven in de vorm van amount="waarde". 1x lukt me nog wel, maar vaker niet.

Mijn code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$tplFile = '
    <table width="100%" border="1">
        <tr>
            <td>Hi<td>
        </tr>
        [loop amount="3"]
        <tr>
            <td>
                [loop name="board"]
                    Hi
                [/loop]
            </td>
        </tr>
        [/loop]
        [loop name="board"]
        <tr>
            <td>Hi</td>
        </tr>
        [/loop]
    </table>
';

$match = '!\[loop (amount|name)="(.*?)"\](.*?)\\[/loop\]!ism';
preg_match_all($match, $tplFile, $backRef);

wat de volgende waarde voor $backRef retour geeft:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Array
(
    [0] => Array
        (
            [0] => [loop amount="3"]
        
            
                [loop name="board"]
                    Hi
                [/loop]
            [1] => [loop name="board"]
        
            Hi
        
        [/loop]
        )

    [1] => Array
        (
            [0] => amount
            [1] => name
        )

    [2] => Array
        (
            [0] => 3
            [1] => board
        )

    [3] => Array
        (
            [0] => 
        
            
                [loop name="board"]
                    Hi
                
            [1] => 
        
            Hi
        
        
        )

)


alle raad welkom, oplossingen ook (en nederlandse tutorials ook 8))

[ Voor 31% gewijzigd door Verwijderd op 18-12-2002 18:55 ]


  • tomato
  • Registratie: November 1999
  • Niet online
Het is niet te doen om een pattern te maken dat genest kan matchen. Gebruik Perl (waar je zelfs nog het liefst op Perl6 zou wachten wat dit betreft :9) of gebruik geen regex.

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
er zijn dingen die je liever niet met regexen doet; dit is een mooi voorbeeld.
een simpele stack-based parser lijkt mij hier de oplossing.

Pas de replâtrage, la structure est pourrie.


Verwijderd

Topicstarter
er zijn dingen die je liever niet met regexen doet; dit is een mooi voorbeeld.
een simpele stack-based parser lijkt mij hier de oplossing.
Ik heb absoluut geen kennis van stackbase parsen. dus dan de vraag : Hoe? en/of waar kan ik het vinden? :o

Het liefst maak ik het zelf, dan leer ik er wat van 8).
dus vtel me het liefst "Hoe?" of waar er tutorials staan :9

[ Voor 19% gewijzigd door Verwijderd op 19-12-2002 00:08 ]