Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Apr 2005

regexp, "if-tester"? (PHP)

Tja,

förmodligen en lätt fråga, men regexp är inte min grej tror jag.

Jag vill köra preg_replace() för att formatera om en textsträng. I strängen finns två eller tre delar (plus lite annat skräp)...om den tredje delen saknas vill jag att den andra ska skrivas ut igen på den platsen. dvs:

$texten = 'första|andra|tredje';
$nytext = preg_replace( '/(.*)(\|(.*))(\|(.*))?/siU', '$1: $3 (???)', $texten );

ok, alltså, i parentesen vill jag att ha det som står efter andra | i texten... men, ibland finns ingen tredje del utan t.ex. bara "första|andra". I så fall vill jag att det ska stå "andra" även i parentesen.

Kan man göra typ if-satser i en preg_replace() så man kan skriva ut olika saker beroende på vad de olika $-strängarna är eller om de finns eller ej? jag kanske bör satsa på en helt annan metod?

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2002

Jag har bara använt str_replace men den kräver att du definerar variabler med arrays i. Har du tittat på den?

http://se2.php.net/str_replace

Klart du kan göra if satser, typ.

if ($variabel == ''){
$nytext = 'ingen text';
}
else {
$nytext = preg_replace(regler);
}

Har jag förståt dig rätt?

Livets 3 pelare:
SEX, MAT & KAFFE.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Apr 2005

Lurcazzus, vet inte om jag förstår dig =/
preg_replace är ju rätt annorlunda jämfört med str_replace. Jag är helt med på hur man kan lösa det med vanliga if-satser, men den metoden är inte en bra lösning i detta fall.

Det jag är ute efter är om det går att göra conditions inuti replace-strängen i en preg_replace, dvs. om substr $5 finns, sätt in den, annars $3.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

Vi hade en liknande fråga här på forumet för några dagar sen. Det lättaste sättet att lösa problemet på är antagligen med preg_replace_callback

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Apr 2005

TippTopp. Det kommer lösa problemet.