Avatar billede rthuls Nybegynder
18. januar 2008 - 18:31 Der er 4 kommentarer og
1 løsning

Hjælp til PHP regex

Jeg har efter meget kamp få skrevet et regex der kan tage en streng og finde en kodestump formateret på denne måde:
[syntax:faa3276bb4="actionscript"]var foo:String = "test";[/syntax:faa3276bb4]

og så konvertere den til:
[code language="actionscript"]var foo:String = "test";[/code]

Min kode ser sådan her ud:
<?php
$text = '[syntax:faa3276bb4="actionscript"]var foo:String = "test";[/syntax:faa3276bb4]';
preg_match('/^(\[syntax\:[a-z0-9]{10}="([a-z]{3,12})"])(.+)\[\/syntax:[a-z0-9]{10}\]/i', $text, $matches);
print '[code type="' . $matches[2] . '"]' . $matches[3] . '[/code]';
?>

Så langt så godt, men hvis strengen indeholder flere kodestrumper, så virker mit regex ikke længere.
Hvordan kan jeg konvertere en streng som:
[syntax:faa3276bb4="actionscript"]var foo:String = "test";[/syntax:faa3276bb4] Her er så lidt tekst [syntax:ba9855sd51="php"]$foo = "test";[/syntax:ba9855sd51]

til:
[code language="actionscript"]var foo:String = "test";[/code] Her er så lidt tekst [code language="php"]$foo = "test";[/code]
Avatar billede erikjacobsen Ekspert
18. januar 2008 - 18:45 #1
Du nok skrive .+? i stedet for bare .+
Avatar billede nielle Nybegynder
18. januar 2008 - 19:02 #2
Hvorfor ikke bare bruge preg_replace() ? :

<?
$text = 'Så langt så godt, men hvis strengen indeholder flere kodestrumper, så virker mit regex ikke længere.
Hvordan kan jeg konvertere en streng som:
[syntax:faa3276bb4="actionscript"]var foo:String = "test";[/syntax:faa3276bb4] Her er så lidt tekst [syntax:ba9855sd51="php"]

$foo = "test";[/syntax:ba9855sd51]
til:
';

$pattern = '\[syntax:([a-z0-9]{10})="(.+?)"\]([^[]+)\[/syntax:\1\]';
$phpPattern = "#$pattern#";
$text = preg_replace($phpPattern, "[code type=\"$2\"]$3[/code]", $text);

print $text;
?>
Avatar billede rthuls Nybegynder
19. januar 2008 - 09:56 #3
Mange tak for jeres svar

@erikjacobsen: Ja det har du ret i.

@nielle: Godt spørgsmål - nok primært fordi jeg hverken er god til Reg Ex eller PHP :-)
Dit script virker perfekt, vil du smide et svar?
Avatar billede nielle Nybegynder
19. januar 2008 - 10:01 #4
Svar :^)
Avatar billede rthuls Nybegynder
19. januar 2008 - 10:13 #5
Takker
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