Bevan: Reguläre Ausdrücke

Hallo!

Ich habe mich bisher immer um reguläre Ausdrücke gedrückt, aber jetzt wird es unvermeidlich. Also habe ich mich damit auseinandergesetzt und etwas versucht:

Ich habe einen String der wie folgt lautet
$binstring = "000001101,010000";
hier möchte ich die 0en am Anfang und am Ende abschneiden und habe folgendes geschrieben:

$binstring = preg_replace ("/^0*(.*)0*$/", "$1", $binstring);

Allerdings schneidet er nur die vorderen 0en ab. (also das Ergebnis lautet 1101,010000).

Ich suche schon eine ganze Weile aber finde keinen Fehler. Es wäre nett, wenn mir jemand auf die Sprünge hilft :-)

Michael

  1. Hallo Bevan,

    ich habe herausgefunden, wie das Ergebnis zustandekommt - allerdings habe ich nicht gleich einen Lösungsansatz für dein Problem. Hier trotzdem das Zusandekommen des Resultats:

    $binstring = preg_replace ("/^0*(.*)0*$/", "$1", $binstring);

    Der Reguläre Ausdruck wird von links nach rechts interpretiert. Demnach gehören die letzten Nullen immer noch zu (.*). Logisch, nicht? ;-)

    Jetzt fehlt nur noch einer der Profis in regulären Ausdrücken, um dir die Lösung mitzuteilen.

    Bis dann!

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
    1. Hi Marc,

      $binstring = preg_replace ("/^0*(.*)0*$/", "$1", $binstring);

      Der Reguläre Ausdruck wird von links nach rechts interpretiert. Demnach gehören die letzten Nullen immer noch zu (.*). Logisch, nicht? ;-)

      Ja, Reguläre Ausdrücke mit * (oder auch +) sind gefräßig - die reißen sozusagen alles an sich, wenn es  irgendwie passt ;-)

      Jetzt fehlt nur noch einer der Profis in regulären Ausdrücken, um dir die Lösung mitzuteilen.

      Hehe, ich fühle mich geschmeichelt ;-))

      Nutze den Modifier U um den RegEx ungreedy (nicht hungrig) zu machen - alternativ müsste es auch gehen, wenn du (.*?) schreibst.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
      Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker gehören und nicht hier her?
  2. Hallo!

    $binstring = "000001101,010000";
    hier möchte ich die 0en am Anfang und am Ende abschneiden und habe folgendes geschrieben:

    [1]*([1-9].*[1-9])[0]*$

    Dein Fehler ist bei Deinem Ausdruck, dass Du mit (.*). (.*) ist sehr gefräßig und nimmt alles bis zum Ende des Strings mit.

    André Laugks

    --
    Die Frau geht, die Hilti bleibt!

    1. 0 ↩︎

    1. Hallo!

      Danke euch beiden! War wohl ein kleiner Denkfehler aber wär ich alleine nie drauf gekommen :)

      Problem gelöst.

      Michael