18. maj 2009 - 21:53
Der er
4 kommentarer og 1 løsning
preg_replace problem
Hej Nu er jeg ikke den store haj til regulat expressions, så smider lige noget kode, og så kommer spørgsmålet: ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' $indhold = {googleSimple 26 width=70% height=200px}; preg_match('/\{googleSimple\s*(.*?)\}/is', $indhold, $matches) .....andet indhold bleh blah $params = process($matches); function process($matches) { if (preg_match('/width=(\d+)/', $matches[1], $matches2)) $width = $matches2[1]; if (preg_match('/height=(\d+)/', $matches[1], $matches2)) $height = $matches2[1]; $param_google = new stdClass; $param_google->width = $width; $param_google->height = $height; return $param_google; } ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dette virker næsten, men ikke helt. Når jeg skriver param_google->width ud, så får jeg 70 og ikke 70%. Når jeg skriver param_google->heightud, så får jeg 200 og ikke 200px. Hvad er der galt med min preg_match?
Annonceindlæg fra SoftwareOne
Du mangler simpelthen noget, der matcher den sidste del, og derfor kommer den ikke med. Nu kan der normalt stå andet end % og px, så måske skal du også tage højde for det? Noget i stil med: if (preg_match('/width=(\d+%¦in¦cm¦mm¦em¦ex¦pt¦pc¦px)/', $matches[1], $matches2)) $width = $matches2[1]; if (preg_match('/height=(\d+%¦in¦cm¦mm¦em¦ex¦pt¦pc¦px)/', $matches[1], $matches2)) $height = $matches2[1]; skulle kunne gøre det. Princippet er, at de muligheder, du vil kunne håndtere, skal listes med | imellem. Du skal formentlig justere mere, hvis du også vil kunne håndtere en eller flere blanke mellem tallet og enheden, men lad os tage en ting ad gangen.
Når jeg prøver på dette, så skriver den slet ikke noget ud. if (preg_match('/width=(\d+%¦in¦cm¦mm¦em¦ex¦pt¦pc¦px)/', $matches[1], $matches2)) $width = $matches2[1]; udskriver ikke noget. Det der ville være bedst var hvis man havde indhold som dette her: $indhold = {googleSimple 26 width="70%" height="200px"}; så fandt min preg_match indholdet inden for width, hvor de 2 gåseøjn er, ligemeget hvad der står der.
Ja, det kan jeg se. Nu har du indført gåseøjne, og jeg har "testet" med denne her: <?php $indhold = "{googleSimple 26 width=\"70%\" height=\"200px\"}"; preg_match('/\{googleSimple\s*(.*?)\}/is', $indhold, $matches); $params = process($matches); print_r($params); function process($matches) { if (preg_match("/width=\"(\d+[\S]*)\"/", $matches[1], $matches2)) $width = $matches2[1]; if (preg_match("/height=\"(\d+[\S]*)\"/", $matches[1], $matches2)) $height = $matches2[1]; $param_google = new stdClass; $param_google->width = $width; $param_google->height = $height; return $param_google; } ?>
Mange tak for hjælpen. Lige det der skulle til. Kan du forklarede de forskellige tegn du har brugt i det? Smid et svar.
Jeg skal prøve: /width=\"(\d+[\S]*)\"/ forklares som følger: / markerer at nu begynder vi width= matcher "width=" \" matcher " - \ er nødvendig fordi eller "misforstås" anførselstegnet ( markerer at nu begynder der noget vi vil "samle op" som argument \d+ matcher 1 eller flere cifre (tallet) [\S]* matcher 0 eller flere tegn ) markerer at nu slutter "opsamlingen" til argumentet \" matcher " / markerer at nu slutter vi That's it. Der findes mange udmærkede tutorials på nettet.
Vi tilbyder markedets bedste kurser inden for webudvikling