Avatar billede mrcorex Nybegynder
21. marts 2005 - 12:40 Der er 18 kommentarer og
1 løsning

Fatter ikke en brik. Help appreciated.

Jeg tror lige jeg skal se lyset. Jeg kan godt forstå Regular Expressions lidt hen ad vejen og jeg kan også godt se at det er smart. Eller kan jeg.... Men når jeg så ser de tunge drenge spille lidt med musklerne så står jeg af......

Hvis jeg f.eks. tager følgende streng "[MyCode=This is a test]" og jeg gerne vil have det til "<myCode>This is a test</a>", hvad gør man så. Nu er det php jeg koder og jeg bruger jo nok den funktion som hedder preg_replace() hvis nogen kender den.

Men hvordan man lige får den fra
"[MyCode=This is a test]"
til
"<myCode>This is a test</a>"
fatter jeg ikke en ski.... af. :)

Den haster lidt så derfor er point sat højt, men du må så også lige forvente at jeg lige skal fatte den. Jeg har ikke bare brug for en løsning her, men jeg har brug for at forstå HVAD løsningen går ud på.

Help!
Avatar billede mrcorex Nybegynder
21. marts 2005 - 14:00 #1
Hov, så den lige. Det skal selvfølgelig se ud som
<myCode>This is a test</myCode>
Avatar billede Slettet bruger
21. marts 2005 - 21:07 #2
hvis du bare skal have lavet det, kan du jo gøre det på en anden måde:

$var = ereg_replace("[mycode=", "<mycode>", $var);
$var = ereg_replace("]", "</mycode>", $var);
Avatar billede mrcorex Nybegynder
21. marts 2005 - 22:59 #3
Så nemt er det heller ikke. [MyCode=This is a test] er ligesom i phpbb-boardet og det er som sådan det samme format jeg skal bruge. Og den string indeholder også [

Nu har jeg lige klippet lidt fra dokumentationen fra phpbb:

Visit phpBB!

er fra deres dokumentationen og den ender op med at blive

<a href="http://www.phpbb.com/">Visit phpBB!</a>

Og det er det som jeg også skal bruge. Men der er ingen der siger at du/i skal løse det for mig. Det kan også være at jeg får en ordentlig forståelse hvad RegExp egentlig er. Jeg har fået forståelsen af at man kan lave SUB-regexp sådan at man først søger efter f.eks. "[url=" og i den SUB som man har lavet kan man den til at søge efter nærmeste "]" lige efter at den har fundet "[url=".

Hehe, håber ikke det var helt sortsnak.
Avatar billede mrcorex Nybegynder
21. marts 2005 - 23:01 #4
F.eks. kunne man søge efter "[url=" ved at lave en RegExp som "/[url=/i" men hvad man gør derefter aner jeg ikke......
Avatar billede roenving Novice
22. marts 2005 - 00:33 #5
Jeg er ikke lige klar over forskellen på ereg_replace og preg_replace, men jeg ville forsøge dette:

$var = "[MyCode=This is a test]";

$var = preg_replace("/\[(\w*?)=([^\]]*)\]/ig", "<\1>\2</\1>", $var);

-- og der er en hel del andre php-ting med regexps, jeg ikke er sikker på:

Skal der bruges // som start og slut, skal modifiers (her ig !-) med i regexp-strengen, og er det rigtigt husket at variable adresseres med \1, \2 osv ...
Avatar billede mrcorex Nybegynder
22. marts 2005 - 07:57 #6
Den modifier "g" findes ikke i php. Og nu skal jeg lige have tid til at decode det som du har skrevet her. For det virker som sortsnak. :) Ej, jeg kan godt se at der er logik i det, men jeg skal lige have fattet den.

Det eneste som jeg kan se om variabler i php er det som står her nedenfor:
Capturing subpatterns that occur inside negative lookahead assertions are counted, but their entries in the offsets vector are never set. Perl sets its numerical variables from any such patterns that are matched before the assertion fails to match something (thereby succeeding), but only if the negative lookahead assertion contains just one branch.

Hvordan bliver en variabel sat eller rettere - hvad bliver den sat med (f.eks. \1) for den har jeg heller ikke fattet. Hehe!
Avatar billede mrcorex Nybegynder
22. marts 2005 - 08:05 #7
I pattern skriver du "(\w*?)". Hvor skal det egentlig i "(" og ")" som sub-pattern. Kunne man ikke bare have undgået "(" og ")" ?
Avatar billede mrcorex Nybegynder
22. marts 2005 - 08:10 #8
Og længede henne i linien skriver du sub-pattern nr. 2 "([^\]]*)" og nu er det jeg står af igen. :( Jeg har forstået på dokumentationen at "^" betyder fra starten af linien ???? Så hvorfor det ?
Avatar billede roenving Novice
22. marts 2005 - 09:43 #9
modifier g er vist også netop noget med forskellen på ereg og preg_replace ...

Fra start:
\[ -- der skal være en skarp parantes efterfulgt af

(\w*?) -- vi opretter en variabel af de karakterer, som findes indtil det efterfølgende tegn (altså lighedstegnet !-)
() er variabel (subpattern !-)
\w betyder 'word'-characters
* betyder 0 eller flere af tegnet
? betyder non-greedy, dvs. den skal stoppe første gang matchende pattern slutter

= er bare lighedstegnet ...

([^\]]*)
[] er normalt en eller-blok (altså at et hvilketsomhelst tegn inde i det kan indgå i pattern), men når der benyttes negator-tegnet (^) betyder det de tegn, som ikke er der, altså her må der matches indtil der stødes på en skarp parantes
\] er escapet, da ] jo skal tages bogstaveligt, og ikke må tænkes som en del af en eller-blok ...

-- men man kunne jo også lave en match-all, som bare er non-greedy:

$var = preg_replace("/\[(\w+?)=(.+?)\]/i", "<\1>\2</\1>", $var);

-- og jeg lavede * (0 eller flere) om til + (1 eller flere), da det jo ikke giver mening uden mindst een karakter !o]

-- i javascript og f.eks. c# skal man bruge $1, $2 osv. for at bruge variabler fra en matched streng, så det skal du måske også forsøge, men såvidt jeg husker er det netop php, som  bruger \ (backslash), da det sprog jo netop bruger $-tegnet til noget andet ...
Avatar billede Slettet bruger
22. marts 2005 - 12:56 #10
hvis du skal matche alle, er jeg rimelig sikker på at du skal bruge preg_match_all, idet preg_match() kun finder den første match.!
Avatar billede mrcorex Nybegynder
28. marts 2005 - 15:06 #11
okay, så faldt tiøren hvad variabler angår. Det er sgi da smart. roenving, det er jo nok dine point. Gider du at svare så jeg kan give dig dem. :)

Og tak!
Avatar billede roenving Novice
28. marts 2005 - 15:16 #12
Velbekomme '-)
Avatar billede roenving Novice
28. marts 2005 - 15:17 #13
-- men 200 point er alt for meget, behold de fleste selv, og del f.eks. også noget ud til de andre deltagere !-)
Avatar billede elskermad.dk Nybegynder
28. marts 2005 - 22:54 #14
roenving: jeg havde for et par måneder siden forslået at det ville være kanon hvis en reg.exp.-ekspert som fx dig ville lave en guide til denne, for os andre, meget komplicerede måde at behandle en streng... kom der noget ud af det? :D
Avatar billede roenving Novice
29. marts 2005 - 04:47 #15
Næh, bl.a. fordi programmeringssprogs-forskellene er relativt små, men ret vigtige (som det også fremgår af dette spørgsmål !-), men det kunne være værd at kigge lidt på ...
Avatar billede mrcorex Nybegynder
29. marts 2005 - 07:27 #16
Jeg har altså tilladt mig at give dig alle point alligevel da jeg fandt din hjælp ret go. Jeg har flere gange prøvet at komme igang med regexp, men det er først gået op for mig hvad bl.a. variabler var, så derfor får du alle p.

Tak for hjælpen!
Avatar billede mrcorex Nybegynder
29. marts 2005 - 07:28 #17
Grunden til at jeg gad alle de point var fordi det hastede som....... Jeg havde et projekt som jeg skulle have færdig NU!. :) Og så var jeg desperat. Det må godt koste....
Avatar billede roenving Novice
29. marts 2005 - 07:29 #18
Tak for point ;~}
Avatar billede mrcorex Nybegynder
29. marts 2005 - 07:29 #19
Velbekomme! Hurtigt svar. Næsten lige som chat......
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
Kurser inden for grundlæggende programmering

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