Veröffentlicht 23. April 201015 j Hallo, ich beisse mir gerade an einem preg_replace Problem die Zähne aus. Evtl. hat jemand eine Idee. Ich habe einen String. Im String befinden sich Hochstriche. Und: Der String ist mit Ziffern durchsetzt. $s = "a1b2c'd3e4f'gh'i5jk6'lm; Hier sollen nur innerhalb der Hochstriche Ziffern eliminiert werden, ausserhalb sollen sie stehenbleiben. Tja, und ich dachte, ich kenne mich mit regulären Ausdrücken ein bisschen aus. Ich habe momentan nicht mal einen Ansatzpunkt, wie ich preg_replace dazu bekomme. Weiss irgendwer weiter? :confused: Würde mich über einen Kommentar freuen. Sabine
23. April 201015 j Wenn Du das ganze auch so aufschreibst, dass man verstehst was Du willst, kann man auch helfen. Du hast einen String und was soll nun genau damit geschehen und wie soll das Ergebnis aussehen. Außerdem solltest Du auch die Sprache nennen mit der Du arbeitest
23. April 201015 j und was genau ist zwischen den hochstrichen? zwischen c' und 'l steht alles zwischen hochstrichen ..
23. April 201015 j Moin, wenn es nicht zwingend ein regulärer Ausdruck sein muss, wollte das hier funktionieren: function fkt_preg_match($s) { $r = ""; $an = 0; for ($i = 0;$i<strlen($s); $i++) { $c = substr($s,$i,1); if ($c == "'") { $an = ($an==0?1:0); $r.=$c; } else { if ($an == 0 || ($an == 1 && ( $c < "0" || $c > "9")) ) { $r.=$c; } } } return $r; } [/PHP] hth Reinhold
25. April 201015 j Also mit nem Regülären Ausdruck würds auch gehen, nur hast du dann das Problem das du nicht so genau definieren kannst was zwischen den Hochstrichen heißt. Aber die Regex müsste in etwa so aussehen (Achtung ungetestet :-)) <?php $s = "a1b2c'd3e4f'gh'i5jk6'lm"; $regex = "/(?<='[a-zA-Z])\d{1}(?=[a-zA-Z])/is"; print preg_replace($regex,"",$s); print "<pre>"; var_dump($array); print "</pre>"; ?> Das macht schonmal aus: a1b2c'd3e4f'gh'i5jk6'lm das hier a1b2c'de4f'gh'ijk6'lm Nen bisschen selber machen kannste schon ;-) Also preg_match in ne schleife laufen lassen oder so in der Art. Hab auch gerade nicht viel Lust da zu basteln ;-)
26. April 201015 j Reinhold, danke sehr, eine 1a Punktlandung, das ist perfekt....:uli Moin, wenn es nicht zwingend ein regulärer Ausdruck sein muss, wollte das hier funktionieren: function fkt_preg_match($s) { $r = ""; $an = 0; for ($i = 0;$i<strlen($s); $i++) { $c = substr($s,$i,1); if ($c == "'") { $an = ($an==0?1:0); $r.=$c; } else { if ($an == 0 || ($an == 1 && ( $c < "0" || $c > "9")) ) { $r.=$c; } } } return $r; } [/PHP] hth Reinhold
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.