[regexp] Probleem met greedy match

Pagina: 1
Acties:

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05-2025
Ik ben bezig met een template systeem, alleen dat werkte de heletijd niet goed. Nu ben ik er achter gekomen dat mijn regexp niet helemaal goed werkt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[!main]
<html>
    <head>
        <title>Verwijder pagina</title>
        <link rel="stylesheet" type="text/css" href="test.css" />
    </head>
    <body>
        <div id="msg">
            [!confirm]
        </div>
    </body>
</html>
[/!main]

[!confirm]
            [msg]<br />
            <form action="DelGebied.php" method="post">
            <input type="submit" value="Yes">
            <input type="button" name="no" value="no">
            <input type="hidden" name="q" value="y">
            <input type="hidden" name="nr" value="[nr]">
            </form> 
[/!confirm]

Dit is de template
/\\[!confirm\](.+)\\[\/!confirm\]/s/n
Dit is de regexp die ik gebruik.

In The Regexp Coach merk ik dat hij ipv
code:
1
2
3
4
5
6
7
8
9
[!confirm]
            [msg]<br />
            <form action="DelGebied.php" method="post">
            <input type="submit" value="Yes">
            <input type="button" name="no" value="no">
            <input type="hidden" name="q" value="y">
            <input type="hidden" name="nr" value="[nr]">
            </form> 
[/!confirm]

matched, matched hij


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            [!confirm]
        </div>
    </body>
</html>
[/!main]

[!confirm]
            [msg]<br />
            <form action="DelGebied.php" method="post">
            <input type="submit" value="Yes">
            <input type="button" name="no" value="no">
            <input type="hidden" name="q" value="y">
            <input type="hidden" name="nr" value="[nr]">
            </form> 
[/!confirm]


Hij pakt dus die eerste [!confirm] Ook mee... Hebben jullie enig idee hoe ik dat kan oplossen. Ik heb al geprobeerd te zoeken op [url]www.regexp.info,[/url] maar ik weet niet hoe ik dat kan omschrijven

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

http://gathering.tweakers...TERS%5D=XF14---A#hitstart

:)

/edit: Tokenizen is leuker en beter. :P

/edit2: stackbased tokenizen kan wel :P

/edit3: maar op bovenstaande manier moet je wel iets met placeholders doen ofzo. :)

[ Voor 34% gewijzigd door RedRose op 19-10-2005 22:19 ]

Sundown Circus


  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Volgens mij valt dat niet makkelijk op te lossen, want wat als er nog 10x [!confirm] in staat?

Of tokenizen, of gewoon een andere naam gebruiken (wat mij verreweg het handigst en makkelijkst lijkt). Dus een standaard manier waarop je je in te vullen stuk noemt en de bijbehorende variabele: [!confirm] en [!confirmcontent] ofzo.

Hm, ik bedenk me net: tokenizen gaat ook niet echt werken. Waarom geef je ze dezelfde labels? Dat is namelijk het probleem, niet je regexp of wat dan ook.

[ Voor 20% gewijzigd door Cavorka op 19-10-2005 22:16 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

code:
1
/\\[!confirm\](.+?)\\[\/!confirm\]/s/n


match non-greedy.
Waarom ben ik nou de eerste met dit antwoord? Dit is echt basis-regexp hoor :)
Tokenizen, andere labelnamen? :X

Ik zit alleen even te kijken... alles tussen [!confirm] en [/!confirm] wordt dus vervangen door "s"?
En wat doet /n ook al weer?

[ Voor 27% gewijzigd door muba op 20-10-2005 03:41 ]

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

MUBA schreef op donderdag 20 oktober 2005 @ 03:40:
code:
1
/\\[!confirm\](.+?)\\[\/!confirm\]/s/n


match non-greedy.
Waarom ben ik nou de eerste met dit antwoord? Dit is echt basis-regexp hoor :)
Tokenizen, andere labelnamen? :X

Ik zit alleen even te kijken... alles tussen [!confirm] en [/!confirm] wordt dus vervangen door "s"?
En wat doet /n ook al weer?
Ehm... je kan wel :X'en, maar die regexp werkt dus niet. Dan pakt hij dus de eerste [!confirm] ook mee.

Hm, I wonder, zou dat misschien komen omdat hij dezelfde labelnaam gebruikt? 8)7

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Cavorka schreef op donderdag 20 oktober 2005 @ 12:02:
[...]
Hm, I wonder, zou dat misschien komen omdat hij dezelfde labelnaam gebruikt? 8)7
Dat maakt op zich niet uit (alhowel het op deze manier en met deze regexp natuurlijk niet werkt), alleen snap ik dan weer niet waarom je een fragment dat je include in dezelfde file zet. Zet het dan gewoon in een include file met meer van dat soort blokken.

Dit zou beter zijn: [!Include="confirm"] of zoiets dergelijks.

Het regexp probleem is imho een gevolg van een regexp gebruiken, terwijl je dat soort dingen stackbased zou moeten doen.

[ Voor 7% gewijzigd door RedRose op 20-10-2005 12:25 ]

Sundown Circus


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Cavorka schreef op donderdag 20 oktober 2005 @ 12:02:
[...]
Ehm... je kan wel :X'en, maar die regexp werkt dus niet. Dan pakt hij dus de eerste [!confirm] ook mee.

Hm, I wonder, zou dat misschien komen omdat hij dezelfde labelnaam gebruikt? 8)7
Hm?
Oh fuck, ik heb verkeerd gelezen :X
Sorry :)

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05-2025
Cavorka schreef op woensdag 19 oktober 2005 @ 22:15:
Volgens mij valt dat niet makkelijk op te lossen, want wat als er nog 10x [!confirm] in staat?

Of tokenizen, of gewoon een andere naam gebruiken (wat mij verreweg het handigst en makkelijkst lijkt). Dus een standaard manier waarop je je in te vullen stuk noemt en de bijbehorende variabele: [!confirm] en [!confirmcontent] ofzo.

Hm, ik bedenk me net: tokenizen gaat ook niet echt werken. Waarom geef je ze dezelfde labels? Dat is namelijk het probleem, niet je regexp of wat dan ook.
Ik geef ze dezelfde labels, omdat het de bedoeling is om het !confirm blok in te vullen op de plaats [!confirm]

Maar ik denk dat jou oplossing, met een andere vaste naam geven het beste is.

en die \n hoort niet in de regexp thuis, maar is een newline in php..

[ Voor 5% gewijzigd door compufreak88 op 20-10-2005 17:00 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

compufreak88 schreef op donderdag 20 oktober 2005 @ 16:59:
Ik geef ze dezelfde labels, omdat het de bedoeling is om het !confirm blok in te vullen op de plaats [!confirm]
Dan doe je gewoon [?confirm] ergens waar iets ingevuld moet worden en een [!confirm]/[/!confirm] blokje waar datgene gedefiniëerd staat. Lijkt me de makkelijkste oplossing. Maar dat was al meer mensen opgevallen. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05-2025
-NMe- schreef op donderdag 20 oktober 2005 @ 17:03:
[...]

Dan doe je gewoon [?confirm] ergens waar iets ingevuld moet worden en een [!confirm]/[/!confirm] blokje waar datgene gedefiniëerd staat. Lijkt me de makkelijkste oplossing. Maar dat was al meer mensen opgevallen. :P
jah ik heb het nu zo opgelost:

waar het neer moet komen: [!confirm]

en de blokken
[!confirm!]
blaat
[/!confirm]

En het werkt nu ook. Dat ik daar niet eerder aan gedacht had.

Bedankt.

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

compufreak88 schreef op donderdag 20 oktober 2005 @ 17:15:
[...]


jah ik heb het nu zo opgelost:

waar het neer moet komen: [!confirm]

en de blokken
[!confirm!]
blaat
[/!confirm]

En het werkt nu ook. Dat ik daar niet eerder aan gedacht had.

Bedankt.
De logica is ver te zoeken, dat wel. :P

Sundown Circus

Pagina: 1