Avatar billede doomstone-dk- Nybegynder
06. november 2008 - 16:08 Der er 1 kommentar og
1 løsning

Regex, Problemer med match inde i match og ny line i match

Hej, jeg er igang med at opdatere mit template system, og jeg har valgt at bruge regex, istedet for MANGE explodes :D

Jeg vil lige starte ud med sige at jeg er meget ny til regex, sådan her ser et af mine templates ud

code:
<html>
    <head>

        <title>Some test</title>

    </head>

    <body>

        <php:if name="iftest" some="stuff">Some stuff asdasdwas</php:if name="iftest">

        <php:if name="iftest2">Some stuff</php:if name="iftest2">

       

        <php:var name="stuff" value="this is some value" blah="blsh" />

    </body>

</html>

Jeg brugte det meste af dagen igår på at lave denne regex

code:
$pattern = '/<php:(.*[^ ])\s*name\s*=\s*[\"\'](.+?)[\"\'](.[^>]*|)>(.*)<\/php:\1\s*name\s*=\s*[\"\']\2[\"\']\s*>/';
preg_match_all($pattern,$html,$matches, PREG_SET_ORDER);

$tags = array();

for($i=0;$i<count($matches);$i++)

{

    $tags[] = array(

            'type' => $matches[$i][1],

            'name' => $matches[$i][2],

            'atributs' => $matches[$i][3],

            'value' => $matches[$i][4],

            'orginal' => $matches[$i][0]

            );

}

$pattern = '/(?i)<php:(.*[^ ])\s*name\s*=\s*[\"\'](.+?)[\"\']\s*value\s*=\s*[\"\'](.+?)[\"\']\s*(.[^>]*|)\s*\/>/';

preg_match_all($pattern,$html,$matches, PREG_SET_ORDER);

for($i=0;$i<count($matches);$i++)

{

    $tags[] = array(

            'type' => $matches[$i][1],

            'name' => $matches[$i][2],

            'atributs' => $matches[$i][4],

            'value' => $matches[$i][3],

            'orginal' => $matches[$i][0]

            );

}

Dog har jeg et par problemer mde den

1. Hvid der er en ny linje imellem <php:??></php:??> tagne, så matcher den det ikke

2. For normal tags, skal det første argument være "name". jeg ville høre om man kunne gøre sådan at man kunne sætte atributes i random rækkefølge.

3. Hvis der er et tag inde i et tag, så matcher den dem ikke rigtigt.

example hvis jeg prøver at paste dette template

code:
    <body>
        <php:if name="iftest" some="stuff">Some stuff <php:var name="stuff" value="this is some value" blah="blsh" /> asdasdwas</php:if name="iftest">

        <php:if name="iftest2">Some stuff</php:if name="iftest2">

    </body>

Så vil mit array se sådan her ud.

code:
Array
(

    [0] => Array

        (

            [type] => if

            [name] => iftest

            [atributs] =>  some="stuff"

            [value] => Some stuff <php:var name="stuff" value="this is some value" blah="blsh" /> asdasdwas

            [orginal] => <php:if name="iftest" some="stuff">Some stuff <php:var name="stuff" value="this is some value" blah="blsh" /> asdasdwas</php:if name="iftest">

        )



    [1] => Array

        (

            [type] => if

            [name] => iftest2

            [atributs] =>

            [value] => Some stuff

            [orginal] => <php:if name="iftest2">Some stuff</php:if name="iftest2">

        )



    [2] => Array

        (

            [type] => if name="iftest" some="stuff">Some stuff <php:var

            [name] => stuff

            [atributs] => blah="blsh"

            [value] => this is some value

            [orginal] => <php:if name="iftest" some="stuff">Some stuff <php:var name="stuff" value="this is some value" blah="blsh" />

        )

)

Tak for jeres hjælp
Avatar billede olebole Juniormester
08. november 2008 - 23:35 #1
<ole>

Det er sikkert en meget sjov .net-agtig-klon, du har gang i, men mon ikke bare, du er ved at lave endnu et langsomt template system (og dem er der allerede rigeligt af!)?

Hvis du vil kunne opbygge dine sider på dén måde, er jeg helt sikker på, dit template system skal skrives i C, C++ eller Java. Ellers er jeg ret sikker på, det bliver dræbende dårligt performende

/mvh
</bole>
Avatar billede doomstone-dk- Nybegynder
17. april 2009 - 15:07 #2
Lukker, skal bare sige at jeg valgte at gå igang med Smarty :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester