Gjest Slettet+1374861 Skrevet 28. mars 2006 Del Skrevet 28. mars 2006 har litt problemer. skal vi se. begynne med kode. $first = "/abc foo def/"; $second = "abc (.+) def/"; la oss si det ALLTID står abc (.+) def i $first. men (.+) kan variere mellom "foo" og "bar". hvis det står "foo" der, så skal det da preg_replaces med "1", hvis det står "bar" skal det replaces med "2". hvordan får jeg til en slik if/else sak? ser ut som preg_replace er litt begrenset på det området, men så litt på preg_replace_callback? er det noe å bruke? Lenke til kommentar
LoS Skrevet 29. mars 2006 Del Skrevet 29. mars 2006 Skjønner ikke helt hva du mener jeg? tror det kan gjøres sånn: <?php $first = preg_replace('#^abc(foo|bar)def$#is", '1', $first); ?> Lenke til kommentar
Gjest Slettet+1374861 Skrevet 29. mars 2006 Del Skrevet 29. mars 2006 okay se da. mulige utfall av $string er: $string = "abc foo def"; $string = "abc bar def"; HVIS $string har "foo" som midtledd skal jeg: preg_replace("/abc (.+{3}) def/", "abc 1 def", $string); HVIS $string har "bar" som midtledd skal jeg: preg_replace("/abc (.+{3}) def/", "abc 2 def", $string); på en måte en if/else i preg_replace'en, så replace-delen av preg_replace er avhengig av midtleddet i $string, men jeg skal ikke gjengi det samme som står i midtleddet, det skal være noe annet. var det mulig å forstå eller var det bare værre? Lenke til kommentar
???????? Skrevet 30. mars 2006 Del Skrevet 30. mars 2006 Hei, hvis du er ny med regex så kan det være lurt å dele den opp i flere omganger. Først søker du etter foo, så søker du etter bra. Du har en funksjon som heter preg_replace_callback() som du kan bruke, men ut fra eksempelet ditt så burde det holde med preg_replace: echo preg_replace(array("/ foo /", "/ bar /"), array(" 1 ", " 2 "), $string); Lenke til kommentar
Gjest Slettet+1374861 Skrevet 30. mars 2006 Del Skrevet 30. mars 2006 det var det jeg burde ha nevnt i innlegget mitt at jeg faktisk bare laget ett eksempel som kunne ligne på den reelle situasjonen. i virkeligheten så er "foo" og "bar" hele 220 ulike kombinasjoner som skal byttes ut etter behov der det kan oppstår flere tilfeller av hver i en 'omgivelse' som ikke er fullt så lett som abc (.+) def, faktisk så vet jeg stort sett ingenting om den. problemet er også at i det virkelige senarioet så er "foo" og "bar" bare en kombinasjon av ett tall og en bokstav, slik at jeg kan ikke gjøre preg_replace('a', '1', $string); siden a vil forekomme plasser der (.+) ikke er. jeg må først lokalisere leddet jeg skal bytte ut, det kan jeg, men så må jeg kunne referere til det ved ett annet navn, basert på hvordan det ser ut. var det tungvindt skrevet? det var det sikkert men kanskje noen NÅ har fått med seg situasjoenn jeg fant ikke helt ut av hvordan callback skulle brukes men det hørtes ut som den var noe i samme retning. Lenke til kommentar
???????? Skrevet 30. mars 2006 Del Skrevet 30. mars 2006 Du gjør det vansklig for oss å hjelpe deg desverre. For å kunne sette sammen en regex så må man vite hvordan stringen ser ut, ikke bare tenkte eksempler. Ellers har man ingen bestemte holdepunkter å bygge opp uttrykket fra. Er det som så at abc og def også kun er tekte eksempler? I så fall har vi ingen ting å gå etter. Hvis det er som så at abc og def alltid er konstanter så kan du bare utvide arrayen over. Problemet dersom de heller ikke er faste konstatner så ber du oss søke etter noe som du ikke bruker i en string du ikke bruker. Post eksempler fra virkligheten. Lenke til kommentar
Gjest Slettet+1374861 Skrevet 30. mars 2006 Del Skrevet 30. mars 2006 (endret) okay, la meg bruke litt tid på å formulere det fint. Endret 30. mars 2006 av Slettet+1374861 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå