dedlfix: Noch immer keine Lösung?

Beitrag lesen

Tach!

There are often times when a grouping subpattern is required without a capturing requirement. If an opening parenthesis is followed by "?:", the subpattern does not do any capturing, and is not counted when computing the number of any subsequent capturing subpatterns. For example, if the string "the white queen" is matched against the pattern the ((?:red|white) (king|queen)) the captured substrings are "white queen" and "queen", and are numbered 1 and 2.

Da wird zuerst gesagt, dass eine Untergruppe, die mit "?:" beginnt, nicht gecaptured wird, und dann steht im Satz danach genau das Gegenteil, nämlich dass "white queen" und "queen" gecaptured worden sind.

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.

Was ich prinzipiell nicht verstehe, ist, wieso es überhaupt nötig ist, nicht zu wollen, dass eine Unterausdruckgruppe eine Nummer bekommt.

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 möchte, dass vor meinen 5-10 Ziffern, also vor dem \d{5,10} entweder ein Nicht-Ziffer-Zeichen ist oder der Treffer am Anfang des Suchstrings ist, dass also davor überhaupt nichts steht. Im regulären Ausdruck steht ^ für den Anfang des Suchstrings. Also "Anfang Suchstring _oder_ Nicht-Ziffer-Zeichen" wäre demnach enweder ein ^|\D oder mit Klammern ein (^|\D). Das ist aber offenbar falsch. Vor das ^ _muss_ unser "?:" kommen, damit es funktioniert. Aber wieso? "Es wird dann nicht gecaptured" ist ja keine Erklärung, wieso es überhaupt sein muss!

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.

dedlfix.

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