Thomas: Problem mit Regular Expression

Hallo,

weiß gar nicht ob das das richtige Sektion ist.

Geht um folgendes, ich suche eine RegEx die folgende Bedingungen erfüllt:

* String darf nicht mit Whitespace/Leerzeichen oder einem Komma anfangen
* In dem String sind alle Zeichen, bis auf Kommas erlaubt. Also auch Leerzeichen sind zugelassen
* String darf nicht mit Whitespace oder einem Komma enden
* Der String muss mindestens 1 und maximal 20 Zeichen lang sein

Mit dieser RegEx decke ich zumindest die ersten 3 Bedingungen ab. Allerdings hapert es an der Längenbegrenzung. Was mache ich falsch? Bzw ich bin auch für elegantere Lösungen offen :)

RegEx:
[1]+([^,\t\v\r\f\n]{1,20})[^,\s ]+$

MFG
Thomas


  1. ^,\s ↩︎

  1. Geht um folgendes, ich suche eine RegEx die folgende Bedingungen erfüllt:
    * String darf nicht mit Whitespace/Leerzeichen oder einem Komma anfangen

    /[1]/

    * In dem String sind alle Zeichen, bis auf Kommas erlaubt. Also auch Leerzeichen sind zugelassen

    /[2][^,]*/

    * String darf nicht mit Whitespace oder einem Komma enden

    /[3][^,]*[^\s,]$/

    * Der String muss mindestens 1 und maximal 20 Zeichen lang sein

    also:
    /[4]$/
    oder
    /[5][^,]{0,18}[^\s,]$/

    zusammengefasst:

    /^(?:[^\s,]|[^\s,][^,]{0,18}[^\s,])$/

    Mit dieser RegEx decke ich zumindest die ersten 3 Bedingungen ab. Allerdings hapert es an der Längenbegrenzung. Was mache ich falsch? Bzw ich bin auch für elegantere Lösungen offen :)

    RegEx:
    [6]+([^,\t\v\r\f\n]{1,20})[^,\s ]+$

    Interessant, dass du nur eine untergruppe von whitespace erfasst...

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische

    1. ^\s, ↩︎

    2. ^\s, ↩︎

    3. ^\s, ↩︎

    4. ^\s, ↩︎

    5. ^\s, ↩︎

    6. ^,\s ↩︎

    1. @@Beat:

      nuqneH

      zusammengefasst:

      /^(?:[^\s,]|[^\s,][^,]{0,18}[^\s,])$/

      Wozu die Klammern?

      Kürzer:

      /[1](?:[^,]{0,18}[^\s,])?$/

      Qapla'

      --
      Volumen einer Pizza mit Radius z und Dicke a: pi z z a

      1. ^\s, ↩︎

      1. Vielen Dank dafür ihr beiden :)

        Allerdings ist im Mittelteil jeglicher Whitespace zugelassen. Dieser soll aber bis auf Leerzeichen verboten sein. Was muss ich dann ändern?

        1. Vielen Dank dafür ihr beiden :)

          Allerdings ist im Mittelteil jeglicher Whitespace zugelassen. Dieser soll aber bis auf Leerzeichen verboten sein. Was muss ich dann ändern?

          Die Beschreibung deiner Aufgabenstellung.
          Und ich frage gleich noch nach: Gilt dies auch für das erste und das letzte Zeichen?

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Nein das gilt nur für den Mittelteil.

            MFG
            Thomas

            1. Nein das gilt nur für den Mittelteil.

              Dann beschreibe zwei zeichenklassen, die für Anfang/Ende und für alles dazwischen gelten.
              Eine Zeichenklasse kann entweder positiv beschrieben werden, oder negativ, aber nicht gemischt.

              mfg Beat

              --
              ><o(((°>           ><o(((°>
                 <°)))o><                     ><o(((°>o
              Der Valigator leibt diese Fische
              1. Kannst du mir bitte auch erklären was du mit Zeichenklasse meinst? Ich bin im RegEx Bereich noch neu und kenne noch nicht alle Tricks und Kniffe.

                Meinst du 2 getrennte Expressions, welche ich dann nacheinander abrufe?

                1. Kannst du mir bitte auch erklären was du mit Zeichenklasse meinst?

                  [a-z] eine positive Zeichenklasse
                  [^a-z] eine negierte Zeichenklasse

                  mfg Beat

                  --
                  ><o(((°>           ><o(((°>
                     <°)))o><                     ><o(((°>o
                  Der Valigator leibt diese Fische
                  1. Also du meinst so?
                    [1](?:[^,\s][\S ]{0,18}[^\s,])?$

                    Das funktioniert allerdings nicht. Könntest du mir bitte auch den : erklären. Hab jetzt schon eine Menge gelesen, aber die Bedeutung des : ist mir nicht klar.


                    1. ^\s, ↩︎

                    1. @@Thomas:

                      nuqneH

                      Könntest du mir bitte auch den : erklären. Hab jetzt schon eine Menge gelesen, aber die Bedeutung des : ist mir nicht klar.

                      ?: gehört zusammen und ist auch in SELFHTML http://de.selfhtml.org/perl/sprache/regexpr.htm#rangfolge@title=erläutert.

                      Qapla'

                      --
                      Volumen einer Pizza mit Radius z und Dicke a: pi z z a
                      1. aha alles klar :)

                        Die RegEx klappt immer noch nicht :(

                        1. @@Thomas:

                          nuqneH

                          aha alles klar :)

                          Die RegEx klappt immer noch nicht :(

                          Wie sieht der Ausdruck denn jetzt aus?

                          Der Ausdruck in der Mitte erweitert um die nicht erwünschten Whitespace-Zeichen (wie du es anfangs hattest) sollte doch das Gewünschte tun.

                          Qapla'

                          --
                          Volumen einer Pizza mit Radius z und Dicke a: pi z z a
                          1. atm sieht der so aus;

                            [1](?:[^,\s][\S ]{0,18}[^\s,])?$

                            Aber das funktioniert nicht und ich weiß ehrlich gesagt nicht, wie ich den Mittelteil anpassen soll.

                            Kannst du mir helfen?

                            MFG
                            Thomas


                            1. ^\s, ↩︎

                            1. @@Thomas:

                              nuqneH

                              [1](?:[^,\s][\S ]{0,18}[^\s,])?$

                              [^,\s][\S ]{0,18} heißt: ein Zeichen außer Komma und Whitespace gefolgt von 0 bis 18 Zeichen außer Whitespace, wobei Leerzeichen doch erlaubt sind. Das ist nicht das, was du willst.

                              und ich weiß ehrlich gesagt nicht, wie ich den Mittelteil anpassen soll.

                              Ich sagte doch: „wie du es anfangs hattest“.

                              [^,\t\v\r\f\n]{0,18}

                              0 bis 18 Zeichen außer Komma und Whitespace, wobei Leerzeichen doch erlaubt sind.

                              Qapla'

                              --
                              Volumen einer Pizza mit Radius z und Dicke a: pi z z a

                              1. ^\s, ↩︎

                              1. Achso - ich dachte damit decke ich nicht jeglichen Whitespace ab? Es sollen ja nur Leerzeichen erlaubt werden.

  2. @@Thomas:

    nuqneH

    Allerdings hapert es an der Längenbegrenzung. Was mache ich falsch?
    [1]+([^,\t\v\r\f\n]{1,20})[^,\s ]+$

    Durch die '+' lässt du vor und nach dem Teil, der 1 bis 20 Zeichen lang ist, jeweils beliebig viele Zeichen (min. 1) zu.

    BTW, das ',' muss wohl nicht escapet werden.

    Qapla'

    --
    Volumen einer Pizza mit Radius z und Dicke a: pi z z a

    1. ^,\s ↩︎