30. april 2010 - 13:19
Der er
1 løsning
Erstatte tekst mellem nested parenteser
Hej. Jeg skal kunne replace alle forekomster af tekst mellem nested parenteser. input kunne være noget lign: "foo(bar)(xxx(yyy))" output skal så være "foo(BAR)(XXX(YYY))" pt har jeg noget lign: /\([a-zA-Z0-9 ]*\)/, men den matcher kun "(bar)", selvfølgelig. Nogen foreslag til hvilke teknikker eller lign jeg skal kigge på?
Annonceindlæg fra Infor
30. april 2010 - 14:32
#1
Fandt ud af at det ikke kunne løses med regexp.. så det er blevet gjort sådan her istedet: $o = $s = "(id=1 OR id=2)&((postal=[])|(postal=1234))"; $match_data = ""; $match_start = -1; $pos = 0; do { $c = $s{$pos}; if(preg_match("/[\(\)\&\|]/", $c)) { if(strlen($match_data)) { $match_length = strlen($match_data); $replace = strtoupper($match_data); $s = substr_replace($s, $replace, $match_start, $match_length); $pos = $pos + (strlen($replace) - $match_length)+1; } $match_start = $pos+1; $match_data = ""; } else { if($match_start >= 0) { $match_data .= $c; } } /* Increase pos */ $pos++; } while(strlen($c)); print $o."<br />"; print $s;