Melvin Cowznofski: Noch immer keine Lösung?

Beitrag lesen

Hallo dedlfix!

Im Zusammenhang mit Gruppierungsklammern () ergibt ?: eine non-capturing Gruppe, sie taucht dann nicht unter den Matches auf. Das ist im PHP-Perl-Regexp-Kapitel beschrieben.

Ich habe mich die letzten 3 Tage immer wieder mit dem Thema auseinandergesetzt und versucht, die Sache zumindest _irgendwie_ zu verstehen, aber was immer ich auch lese ... ich verstehe _nichts_. Mir ist die ganze Sache so schleierhaft, dass ich mir jetzt auch sehr schwer tue, eine Frage zu formulieren oder wirklich exakt zu beschreiben, was jetzt genau die Unklarheit ist.

In dem von mir schon verlinkten REGEX Tutorial habe ich sogar auf der Seite Zeichen gruppieren durch Unterausdrücke eine Erklärung zu dem ominösen "?:" gefunden. Ebenso wie verschiedene andere Erklärungen auf Englisch, wie zB. BackReferences in Regular Expression. Und natürlich fand ich auch im php-Manual die Seite Subpatterns, wo das "?:" erwähnt wird.

Einer der vielen Unklarheiten für mich ist zB. Folgendes aus dem php Manual:

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.

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

Aber kommen wir zum ursprünglichen Problem: 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! Kannst Du mir das bitte in einem verständlichen nicht-techsprech-deutsch erklären?

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