Avatar billede skg Nybegynder
17. april 2003 - 14:44 Der er 8 kommentarer og
1 løsning

Finde php kode i fil

hej

Jeg har brug for en måde ( en regular expression ) der kan læse alle forekomster af PHP kode i en fil, og gøre det muligt at lave dem om til noget andet.

Der hvor jeg selv går lidt død i det, er hvis man f.eks inde i sin kode har skrevet <? eller ?>, da det jo i bund og grund er dem man søger efter (ja, det forekommer måske, aldrig, men det kan lade sig gøre, f.eks i en streng).
Avatar billede al1407 Nybegynder
17. april 2003 - 14:51 #1
if (preg_match_all("'<\?(php|)(.*)\?>'isU", $file_content, $regs))
{
    print_r($regs);
}

i - caseless
s - 'dotall' dvs., '.' i regex'en matcher ALT (også newlines, som den normalt ikke gør)
U - ungreedy (hvis ej brugt vil den match fra første <? til sidste ?> incl. alt HTML imellem, hvis der er noget)
Avatar billede skg Nybegynder
17. april 2003 - 14:54 #2
kan man ikke samtidig tage højde for at indholdet af $file_content ser således ud:


<? echo("<? hej(\"hejsa\"); ?>"); ?>
Avatar billede al1407 Nybegynder
17. april 2003 - 14:55 #3
Prøv det engang ...

(php|) betyder at der KAN stå <?php men også kun <? ...
Avatar billede al1407 Nybegynder
17. april 2003 - 14:57 #4
http://phpdk.dk/php.php ..

jeg er nødt til at smutte nu .. :/
Avatar billede al1407 Nybegynder
17. april 2003 - 14:57 #5
Just in case ...
Avatar billede skg Nybegynder
18. april 2003 - 09:33 #6
al1407 > som du nok selv kan se, virker det du har lavet ikke !

allerede i første match går det galt, da der står ?> i udtrykket i kaldet til preg_match_all. Dette bliver tolket som en afslutning af en php block.
Avatar billede skg Nybegynder
20. april 2003 - 15:52 #7
'<\?(php|)(.*)(\)|}|\r|\n|;)\?>'isU

byggede selv lidt videre på løsnigen fandt frem til ovenstående
Avatar billede al1407 Nybegynder
23. april 2003 - 20:02 #8
"allerede i første match går det galt, da der står ?> i udtrykket i kaldet til preg_match_all. Dette bliver tolket som en afslutning af en php block."

Så forstår jeg ikke hvad du vil have ...

's' modifieren i regex'en betyder 'dotall', eller at '.' matcher ALLE tegn incl. newlines (\r|\n).
Avatar billede skg Nybegynder
24. april 2003 - 01:13 #9
ja, den gør også det den skal, men som du nok kan se står der jo ?> inde i kode, og det trigger den på.

F.eks:
<? echo("<? hej(\"hejsa\"); ?>"); ?>

Det der står inden i strengen der bliver skrevet ud, indeholder ?> og derfor finder man ikke hele kode-blokken, men kun en smule af den ( <? echo("<? hej(\"hejsa\"); ?> ) og det er jo ikke det der er meningen.

Det er stadig et problem i den løsning jeg selv kom frem til, men jeg ved så ikke helt hvordan det hele kan løses - hvis man vil være helt sikker skal man jo checke om man er inden i en streng, og end ikke det vil give det helt rigtige resultat ( så vidt jeg lige kan tænke mig frem til ).
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