Melvin Cowznofski: Noch immer keine Lösung?

Beitrag lesen

Hallo dedlfix!

Das ?: steht nur im Subpattern (red|white). Die Gruppe (king|queen) wird gefangen und außerdem steht alles beides und ein Leerzeichen in einer weiteren Gruppe. Du hast da also drei Gruppen und zwei davon werden gefangen. Ohne das ?: würde das white noch ein weiteres Mal in den Matches/Backreferences auftauchen.

Vereinfacht gesagt: Bei ((a|b)(c|d)) würde es bei einem bd zu drei captures kommen: bd (1), b (2) und d (3). Bei ((?:a|b)(c|d)) fällt die Nummer 2 weg und es kommt zu zwei captures: bd (1) und d (2). Verstehe ich das so richtig?

Das ?: zeigt dem Leser, dass man hier zwar gruppieren musste, um einen Teilausdruck zu begrenzen, aber das Ergebnis der Gruppe nicht extra braucht. Du kannst das im Grunde auch weglassen. Es ist jedoch verständlicher, wenn du dem Leser sagst, was wichtig ist und was nicht.

Ich habe in den letzten Tagen, weil mir die Sache keine Ruhe gelassen hat, an die 100 verschiedenen Tests mit regulären Ausdrücken gemacht. Auch Versuche ohne dem "?:". Dabei bilde ich mir ein, nie ein korrektes Resultat bekommen zu haben. Das hatte aber offenbar andere Gründe. Ich habe deshalb jedenfalls fälschlicherweise angenommen, dass in unserem Fall das "?:" ein Muss ist.

Doch tatsächlich: ~(^|\D)\d{5,10}($|\D)~ funktioniert. Sehe ich es also richtig, dass das nun _endlich_ die korrekte und kürzest mögliche Form ist, damit es zu einem Treffer kommt bei einer Zahl mit 5-10 Stellen?

Wer sagt denn, dass da ein ?: stehen muss? Es geht auch wunderbar ohne. Nur ohne Klammern wird es nichts, weil auch das | gierig ist und nicht nach dem \D Halt macht.

Das wäre jetzt dann meine letzte Unklarheit. Wie meinst Du das mit dem "gierig sein" ohne Klammern? ~(^|a)bc~ matcht a und abc. ~^|abc~ matcht _alles_, weil das sagt aus, dass es entweder mit abc oder mit einem Anfang anfangen muss. Wolltest Du darauf hinweisen?

Mit lieben Grüßen

Melvin Cowznofski

--

Melvin Cowznofski
What – me worry?
0 45

Probleme mit regulärem Ausdruck

DocSky
  • php
  1. 0
    Melvin Cowznofski
    1. 0
      dedlfix
      1. 0
        Melvin Cowznofski
        1. 1
          Gunnar Bittersmann
          1. 0
            Christian Kruse
          2. 0
            dedlfix
          3. 0

            regexp: \d != [0-9]

            seth
            • programmiertechnik
      2. 0
        dedlfix
        1. 0
          Melvin Cowznofski
          1. 0
            Gunnar Bittersmann
            1. 0
              Melvin Cowznofski
              1. 0
                Matthias Apsel
                1. 0
                  Melvin Cowznofski
                  1. 0

                    Noch immer keine Lösung?

                    Melvin Cowznofski
                    1. 0
                      dedlfix
                      1. 0
                        Melvin Cowznofski
                        1. 0
                          dedlfix
                          1. 0
                            Melvin Cowznofski
                            1. 0
                              dedlfix
                              1. 0
                                Melvin Cowznofski
                                1. 0
                                  dedlfix
                                  1. 0
                                    Melvin Cowznofski
                                    1. 0
                                      dedlfix
                                      1. 0

                                        Frage nun beantwortet!

                                        Melvin Cowznofski
                    2. 0
                      Gunnar Bittersmann
                      1. 0
                        Melvin Cowznofski
                        1. 0
                          dedlfix
                        2. 0
                          misterunknown
                2. 0
                  dedlfix
                  1. 0

                    Postleitzahlen

                    Matthias Apsel
                    • sonstiges
                    1. 0
                      Tobias Hahner
                      1. 0
                        Matthias Apsel
                        1. 0
                          Tobias Hahner
                          1. 0
                            Matthias Apsel
                            1. 0
                              Tobias Hahner
                            2. 0
                              Der Martin
              2. 0
                Gunnar Bittersmann
    2. 0
      Gunnar Bittersmann
      1. 0
        Melvin Cowznofski
      2. 0
        DocSky
    3. 0
      DocSky
      1. 0
        Gunnar Bittersmann
      2. 0
        dedlfix
  2. 0

    5- bis 10-stellige zahl in string matchen

    seth