Gå til innhold

preg_replace ... callback?


Gjest Slettet+1374861

Anbefalte innlegg

Gjest Slettet+1374861

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
Videoannonse
Annonse
Gjest Slettet+1374861

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? :p

Lenke til kommentar

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

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 :p

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

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

okay, la meg bruke litt tid på å formulere det fint.

Endret av Slettet+1374861
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...