21. marts 2005 - 12:40Der 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å.
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:
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=".
-- 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 ...
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!
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 ?
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:
-- 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 ...
Synes godt om
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.!
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
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å ...
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.
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....
Velbekomme! Hurtigt svar. Næsten lige som chat......
Synes godt om
Ny brugerNybegynder
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.