heinetz: Backreference?

Hallo Forum,

ich komme gerade mit meinem Pattern für preg_replace gedanklich nicht weiter. Vielleicht kann mir jemand einen Anstoss geben.

((?:[ ]?[0-9]){6,})

Mit diesem Muster suche ich nach Zeichenketten, bestehend aus mindestens 6 Integers, die optional durch Leerzeichen voneinander getrennt sind. Mit dem Muster finde ich also bspw.

1 2 345 6

Das Ergebnis habe ich als Backreference in $1 zur Verfügung. Nun würde ich aber gerne die
Leerzeichen entfernen. Komme ich da ohne Callback aus ?

danke für Tipps und

best gruesse,
heinetz

  1. Hallo heinetz,

    ((?:[ ]?[0-9]){6,})

    Besser, weil übersichtlicher, finde ich: ~[1]|\s{6}$~

    Das Ergebnis habe ich als Backreference in $1 zur Verfügung. Nun würde ich aber gerne die
    Leerzeichen entfernen. Komme ich da ohne Callback aus ?

    $string = '1 2 345 6';  
    $string = str_replace(' ', '', $string);  
    var_dump($string);
    

    Wo liegt das Problem?

    Liebe Grüße

    Hugo Egon Balder


    1. 0-9 ↩︎

    1. $string = '1 2 345 6';

      $string = str_replace(' ', '', $string);
      var_dump($string);

      
      >   
      > Wo liegt das Problem?  
        
      nirgends, WIE der Callback in dem Fall aussehen muss ist nicht die Frage, sondern OB  
      sich das auch ohne Callback machen lässt.  
        
      gruss,  
      heinetz
      
    2. ((?:[ ]?[0-9]){6,})

      Besser, weil übersichtlicher, finde ich: ~[1]|\s{6}$~

      Das matcht auf eine bliebige zeichenkette die 6 Zeichen lang ist und aus Whitespace-Zeichen oder Ziffern besteht - also z.B. auch "01234 " oder "      "


      1. 0-9 ↩︎

      1. Besser, weil übersichtlicher, finde ich: ~[1]|\s{6}$~

        Das matcht auf eine bliebige zeichenkette die 6 Zeichen lang ist und aus Whitespace-Zeichen oder Ziffern besteht - also z.B. auch "01234 " oder "      "

        Richtig. Ich habe nämlich das Ziel des OP (fälschlicherweise) so verstanden, dass es _insgesamt_ 6 Zeichen sind. Ich sehe jetzt erst, dass ich das falsch gelesen habe und es 6 int _plus_ eveueller Abstand sind.

        Bei insgesamt 6 int plus event. Leerzeichen würde ich es so lösen:

        ~^\s*([0-9]\s*){6}$~


        1. 0-9 ↩︎

        1. Gut, weil Du es übersichtlicher findest, würdest Du das so lösen. Aber auch damit wäre ich die Leerzeichen in meiner backreference doch nicht los.

  2. Hi,

    ((?:[ ]?[0-9]){6,})
    Mit diesem Muster suche ich nach Zeichenketten, bestehend aus mindestens 6 Integers, die optional durch Leerzeichen voneinander getrennt sind. Mit dem Muster finde ich also bspw.

    1 2 345 6

    Das Ergebnis habe ich als Backreference in $1 zur Verfügung. Nun würde ich aber gerne die
    Leerzeichen entfernen. Komme ich da ohne Callback aus ?

    Du darfst die Leerzeichen nicht matchen - also nur einen Lookahead/Lookbehind für die Leerzeichen machen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Ok, die Idee klingt vernünftig. Aber ich krieg's nicht hin und werd's wohl mit nem Callback machen ...

      gruss,
      heinetz