[PHP] vervangen!

Pagina: 1
Acties:
  • 518 views sinds 30-01-2008
  • Reageer

Anoniem: 35432

Topicstarter
Hoi,
Ik heb al een hele tijd zitten stoeien met erreg replace.
Ik heb een string met deze inhoud:
{PARAGRAAF}
Hoi ik ben {NAAM}.
{/PARAGRAAF}

Ik wil dus een heleboel keer {PARAGRAAF} tot {/PARAGRAAF} vervangen.
en dan moet ie ook {NAAM} vervangen in $naam
en {PARAGRAAF} en {/PARAGRAAF} moet ie weghalen.

Ik kom er zelf niet meer uit op mijn manier:
PHP:
1
2
3
4
5
6
7
8
<?
function Apart($partbegin,$partend,$old,$new) {
Global $output;
$memory1 = preg_replace("/($partbegin)(.*?)($partend)/","\\2",$output);
$memory2 = str_replace("$old", "$new", $memory1);
$output=preg_replace("/(\{$partbegin\})(.*?)(\{\/$partend\})/","$partbegin".$memory2."$partend",$output);
}
?>

$output : is de string waar een heleboel tekst in staat en ook dat {PARAGRAAF} tot en met {/PARAGRAAF}. deze string moet ie inlezen en bewerken(replacen).
$partbegin : is een string met {PARAGRAAF} er in
$partend : is een string met {/PARAGRAAF} er in


Hij doed het alleen niet, hij geeft deze error:
Warning: Unknown modifier 'T' in C:\apache\htdocs\test\class_test.php3 on line 39

Warning: Unknown modifier 'T' in C:\apache\htdocs\test\class_test.php3 on line 41
Wat moet ik doen?? help!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Het is voor dit probleem veel makkelijker om het document in XML te schrijven en met behulp van een XSL stylesheet met een parameter (de naam) te transformeren naar datgene wat je eruit wilt krijgen :) . Voordelen: duidelijkere code, makkelijker aan te passen, zeer goed uit te breiden met nieuwe elementen, duidelijke syntax.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01 11:31
je moet of in /paragraaf even de / escapen met een \ dan krijg je dus: {\/paragraaf} (<-- in $partend) of in je regex even de delimiter (/) veranderen in bijvoorbeeld '!' (zonder quotes)

succes!

Anoniem: 35432

Topicstarter
Het werkt niet, maar weet niet iemand hoe ik het doe dan?
Hoe ik het volgende doe:
kijken wat er tussen {TEXT} en {/TEXT} zit, deze weer een keer replacen, en er later weer tussen plakken?
Alvast bedankt

Anoniem: 35432

Topicstarter
niemand?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 03-02 23:18

D2k

Op woensdag 19 september 2001 22:15 schreef Stoel het volgende:
niemand?
<ot>
schoppen na 2 uur is irritant
wacht gewoon 24 uur
dat komt ook in de nieuwe faq
</ot>

Doet iets met Cloud (MS/IBM)


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Ik kon het niet laten om nog even de kracht van XML/XSL te laten zien. Je zult het vast niet willen toepassen, maar goed...

Als je deze XML file neemt als formaat:
code:
1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>

<document>
    <paragraph>Blablabla</paragraph>

    <paragraph>Hoi ik ben <name/></paragraph>

    <paragraph>Blablabla</paragraph>
</document>

en deze stylesheet:
code:
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
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html"/>
    <xsl:param name="name"/>

    <xsl:template match="document">
        <html>
            <head>
                <title>Example</title>
            </head>

            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="paragraph">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>

    <xsl:template match="name">
        <xsl:value-of select="$name"/>
    </xsl:template>
</xsl:stylesheet>

komt er prachtig dit uitrollen (met als parameter "Martin Bravenboer":
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Example</title>
</head>
<body>
    
<p>Blablabla</p>

    
<p>Hoi ik ben Martin Bravenboer</p>

    
<p>Blablabla</p>

</body>
</html>

Het is ook mogelijk om naar plain text te transformeren of wat voor formaat dan ook...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01 11:31
martin, wat laat je die xslt nou interpreteren? je browser of een of andere parser?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Ik doe het met een klein proggie geschreven in Java, die gebruikt maakt van JAXP, wat standaard in Java 2 v1.4 zit.JAXP maakt weer gebruik van Apache's Xalan. Ik hoef alleen maar in te tikken:

JAXPTransform input.xml stylesheet.html output.html :) .

Maar je kan het ook gewoon in Mozilla/IE 6.0 doen :) . Ik weet alleen niet hoe het dan met de parameters werkt die ik hier gebruik...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 14:52

GraasGast

Analogue Heaven

Mravenboer:
maar is dit nou erg nuttig in een php/mysql environment?

vergeleken met een standaard html template met {placeholders} enzo, aangeroepen met een mooie class ($template->set("name", $name); enz) lijkt dat xml gedoe me vrij omslachtig allemaal, ook kwa editten (code-n00bs met dreamweaver vinden templates met css enzo best fijn)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
GraasGast: maar is dit nou erg nuttig in een php/mysql environment?
Tja, XSLT kan je ook toepassen in PHP, dus dat is het punt niet. Je zou zelfs in noodgevallen vanuit PHP Java kunnen gebruiken. Met MySQL heeft het denk ik weinig te maken.
vergeleken met een standaard html template
Die zijn natuurlijk ook fraai. Hij was hier echter bezig met regex. Das minder prettig :) .

Templates hebben echter weer als nadeel dat je de template in feite aan het invullen bent. Hierdoor voor alle verschillende outputs een aparte file maken. In dit geval had je dus geen mooie beschrijving van je data kunnen nemen, maar moet je de gegevens invullen in je output. Je zou in dit geval zelfs ook nog een fraaie tussenstap kunnen gebruiken door eerst alleen de template functies uit te voeren. Daarna kan het dan naar de gewenste output vorm worden getransformeerd. XSLT transformeert een XML bron naar een willekeurige output. Bovendien is XML een standaard oplossing. XSL zou ook nog client-side uitgevoerd kunnen worden.
lijkt het me vrij omslachtig allemaal
Het biedt ook veel meer mogelijkheden :) . Het XML formaat is bovendien duidelijker. XSL is eventjes pittig, maar als je het goed kunt is de kracht ervan fenomenaal.
met css enzo best fijn)
Niemand houd je tegen om nog steeds css te gebruiken als je XSL gebruikt... :)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 14:52

GraasGast

Analogue Heaven

hmja het heeft inderdaad wel z'n voordelen

maar wat ik me afvraag...die xml-file moet toch ook gegenereerd worden? of roep je die echt aan met parameters?

ja eregs zijn idd ff lastig...ik ben zelf bezig met een erg coole template class, met repeating fields, automatische array-detectie en opvulling, en er komt een systeem in voor embedded(sub) templates...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
GraasGast: maar wat ik me afvraag...die xml-file moet toch ook gegenereerd worden? of roep je die echt aan met parameters?
De eerste XML file is de bron, waar dit vandaan komt weet ik niet. De tweede XSL stylesheet ligt vast en roep ik aan met de parameter naam. De derde file komt eruit rollen als ik op de eerste XML file de XSL stylesheet toepas.

Het zou misschien nog mooier zijn om eerste de bron in te vullen met de parameter en daarna pas te transformeren naar (X)HTML/plain text/LaTeX/PDF/whatever. Dit kan ook in 1 keer maar toch gescheiden door in de XML -> HTML stylesheet de 'template' stylesheet te importeren.
ik ben zelf bezig met een erg coole template class, met repeating fields, automatische array-detectie en opvulling, en er komt een systeem in voor embedded(sub) templates...
Dan weet je waarschijnlijk hoe ontzettend veel werk dit is... Het voordeel van deze oplossing is juist dat er allemaal standaard oplossingen voor kunnen worden gebruikt: Je bouwt een XML file met je data (eventueel dynamisch, dan heb je in ieder geval geen parameters nodig) en past daarop een of meer stylesheets toe. Allemaal standaarden en allemaal standaard software :) . Als XSL goed doorgedronge is in de browser-wereld kan je die ook nog client-side laten toepassen :).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 14:52

GraasGast

Analogue Heaven

dat laatste klinkt erg interesant :)

maar ik denk dat ik nog wel ff wacht voordat ik xml daadwerkelijk ga toepassen...eerst maar ff leren hoe de vork in de steel zit/kat uit de boom kijken...

ja een uitgebreide en goede template class is idd redelijk veel werk, al vind ik het tot nu toe meevallen...maar dat is dan zonder repeating blocks en subtemplates nog...

de functionaliteit is tot nu toe het vervangen van de placeholders door variabelen, en het vervangen van gerelateerde placeholders ({naw_naam}, {naw_adres} enz...) door het gelijknamige array ($naw = array(naam=>$naam, adres=>$adres enz...)).
Dit laatse is vooral om snel data vanuit mysql_fetch_array() in een template te schoppen...

ik zit nu op ongeveer 50 regels code, inclusief witregels enzo...

mja nu snel naar bed toe, morgen weer veel te vroeg op (6.45 zeg maar ;() :z

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 04-06 19:47
Voor degene die denken dat het gebruik van XSLT met Java moet gebeuren en dat helemaal niet zien zitten: Het kan ook heel gemakkelijk met PHP.

Er zijn gewoon standaard functies waarmee je een XSL een XML kan laten transporten.

Anoniem: 35432

Topicstarter
hier heb ik dus niks aan, want ik probeer een soort template engine te maken, een simpele, maar het wil dus niet, en ik wil geen XML gebruiken

Anoniem: 26342

hmm waarom sorteerd ie nu niet op reply!!
Ow het werkt al, zorry dat ik in deze topic post, moest ff testen, sorry!! ik weet trouwens het antwoord niet!!

Anoniem: 35432

Topicstarter
Op donderdag 20 september 2001 16:33 schreef ruud_k het volgende:
hmm waarom sorteerd ie nu niet op reply!!
Ow het werkt al, zorry dat ik in deze topic post, moest ff testen, sorry!! ik weet trouwens het antwoord niet!!
daar heb ik toch niet aan ;););) maja, iemand anders?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Stoel: hier heb ik dus niks aan, want ik probeer een soort template engine te maken, een simpele, maar het wil dus niet, en ik wil geen XML gebruiken
Ik schetste alleen maar een in mijn ogen betere en makkelijkere oplossing, die wellicht ook voor andere bezoekers interessant kan zijn :) . Problemen die jij hebt zijn ook interessant voor andere bezoekers... Vaak heeft het geen nut om bepaalde problemen zelf te gaan implementeren (tenzij je dat leuk vind ;) ). Je bent natuurlijk volkomen vrij om het toe te passen of niet :). Ik hoop dat iemand anders je originele probleem nog kan oplossen, mij is dat te obscure code :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Anoniem: 35432

Topicstarter
Op donderdag 20 september 2001 16:37 schreef mbravenboer het volgende:

[..]

Ik schetste alleen maar een in mijn ogen betere en makkelijkere oplossing, die wellicht ook voor andere bezoekers interessant kan zijn :) . Problemen die jij hebt zijn ook interessant voor andere bezoekers... Vaak heeft het geen nut om bepaalde problemen zelf te gaan implementeren (tenzij je dat leuk vind ;) ). Je bent natuurlijk volkomen vrij om het toe te passen of niet :). Ik hoop dat iemand anders je originele probleem nog kan oplossen, mij is dat te obscure code :) .
toch bedankt voor je moeite, ik hoop ook dat er nog iemand reageerd!

Acties:
  • 0 Henk 'm!

Anoniem: 35432

Topicstarter
niemand :??

Acties:
  • 0 Henk 'm!

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op vrijdag 21 september 2001 08:20 schreef Stoel het volgende:
niemand :??
ik heb nog een mooie oplossinge liggen met XML en JSP, maar ik ga ervan uit dat je daar geen interresse in hebt..

Acties:
  • 0 Henk 'm!

Anoniem: 35432

Topicstarter
Op vrijdag 21 september 2001 09:03 schreef wasigh het volgende:

[..]

ik heb nog een mooie oplossinge liggen met XML en JSP, maar ik ga ervan uit dat je daar geen interresse in hebt..
Neeej, want ik wil een soort template engine maken, die heel basic is
Alleen kom ik hier nu niet uit
ik wil dit namelijk doen

Dat ik bijvoorbeeld deze template:

[text]
<tr>
<td>[test]</td>
<td>[antwoord]</td>
</tr>
[/text]

en [text] en [/text] moeten blijven staan!

heel vaak kan parsen!

tjah, het wil dus niet :(:(

Acties:
  • 0 Henk 'm!

Anoniem: 9021

Op woensdag 19 september 2001 22:44 schreef mbravenboer het volgende:
Ik kon het niet laten om nog even de kracht van XML/XSL te laten zien. Je zult het vast niet willen toepassen, maar goed...

Als je deze XML file neemt als formaat:
code:
1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>

<document>
    <paragraph>Blablabla</paragraph>

    <paragraph>Hoi ik ben <name/></paragraph>

    <paragraph>Blablabla</paragraph>
</document>

en deze stylesheet:
code:
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
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html"/>
    <xsl:param name="name"/>

    <xsl:template match="document">
        <html>
            <head>
                <title>Example</title>
            </head>

            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="paragraph">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>

    <xsl:template match="name">
        <xsl:value-of select="$name"/>
    </xsl:template>
</xsl:stylesheet>

komt er prachtig dit uitrollen (met als parameter "Martin Bravenboer":
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Example</title>
</head>
<body>
    
<p>Blablabla</p>

    
<p>Hoi ik ben Martin Bravenboer</p>

    
<p>Blablabla</p>

</body>
</html>

Het is ook mogelijk om naar plain text te transformeren of wat voor formaat dan ook...
* Anoniem: 9021 maakt een diepe buiging: XML evangalisten, verenigt u allen! :)

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 04-06 19:47
Op vrijdag 21 september 2001 15:38 schreef pinguin het volgende:
* Anoniem: 9021 maakt een diepe buiging: XML evangalisten, verenigt u allen! :)
Helaas wil de topicstarter het niet, want blijkbaar lijkt XML zo moeilijk.


Maar om toch nog wat nuttigs toe te voegen:
PHP:
1
2
3
4
5
6
7
<?
function p_replace($naam) {
    $pattern = '!\{paragraaf\}(.*?)\{naam\}(.*?)\{/paragraaf\}!';
    $replace = '\\1' . $naam . '\\2';
    return preg_replace($pattern, $replace, $naam);
}
?>

ps. voordat je hier vragen over gaat stellen, raad ik je aan om eerst http://www.php.net/manual/en/ref.pcre.php te lezen om boze reacties te voorkomen :)

Acties:
  • 0 Henk 'm!

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 07-06 10:25
// off
mbravenboer is een echte XML fan merk ik steeds vaker :D

Acties:
  • 0 Henk 'm!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
razor-x: mbravenboer is een echte XML fan merk ik steeds vaker :D
Hehe :) . Ik ben niet zozeer een fan van XML, maar wel een fan van de standaardisatie van XML ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1