heinzmueller7779 Geschrieben 23. April 2010 Geschrieben 23. April 2010 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 Zitieren
flashpixx Geschrieben 23. April 2010 Geschrieben 23. April 2010 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 Zitieren
_n4p_ Geschrieben 23. April 2010 Geschrieben 23. April 2010 und was genau ist zwischen den hochstrichen? zwischen c' und 'l steht alles zwischen hochstrichen .. Zitieren
Reinhold Geschrieben 23. April 2010 Geschrieben 23. April 2010 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 Zitieren
thorsten1987 Geschrieben 25. April 2010 Geschrieben 25. April 2010 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 ;-) Zitieren
heinzmueller7779 Geschrieben 26. April 2010 Autor Geschrieben 26. April 2010 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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.