• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Regulärer Ausdruck

#14 ist für mich keine zufriedenstellende Erklärung, warum heißt es nicht "etwas...", da man ja einen Punkt verwendet? Ich könnte ja auch
Code:
(?=[a-zA-Z]{2,5}\d+$)\w{3,8}
schreiben.
 
Zuletzt bearbeitet:
#14 ist für mich keine zufriedenstellende Erklärung, warum heißt es nicht "etwas..."
ok
der regexp bedeutet ja "nichts mit lookahead auf (2-5 zeichen gefolgt von zahlen gefolgt von stringende) gefolgt von 3 bis 8 etwas"

also nichts gefolgt von 3 bis 8 etwas
und das etwas was dem nichts folgt muss 2-5 zeichen gefolgt von zahlen gefolgt von stringende entsprechen
 
Das es nichts gefolgt von etwas heißt, wobei etwas 3 - 8 Zeichen lang ist und etwas (?=Ausdruck) erfüllen muss sehe ich.

Aber das konnte ich nicht annähernd aus den Erklärungen in Wiki lesen. Es müsste dann ietwas stehen wie: "Ausdruck muss auf vorgenannten Ausdruck folgen, wobei Ausdruck durch die Bedingung von (?=Ausdruck) zusätzlich beschrängt wird. Ausdruck(?=Ausdruck)Ausdruck"
 
Zuletzt bearbeitet:
Shibb, ich kann dir nur wärmstens das Tool hier empfehlen: http://regex101.com/
Damit kannst du Stück für Stück deine Regex bauen und bekommst jeden Teil rechts genau erklärt. Ich nutze das mittlerweile bei jedem etwas unübersichtlichen Regex. Das Ding ist einfach nur gut.
 
Es müsste dann ietwas stehen wie: "Ausdruck muss auf vorgenannten Ausdruck folgen, wobei Ausdruck die Bedingung von Ausdruck zusätzlich beschrängt wird. Ausdruck(?=Ausdruck)Ausdruck"
nein, das sind 2 sachen einmal
Ausdruck(?=Ausdruck)
und einmal
AusdruckAusdruck wobei hier der Ausdruck das ist: Ausdruck(?=Ausdruck) und Ausdruck ist .{3,8}
 
Zuletzt bearbeitet:
@hesst das Zitat entspricht nicht dem was ich in meinem Beitrag schrieb (edit 13h00).
dann entspricht es dem text vor dem edit, meine antwort bleibt die gleiche

- - - Aktualisiert - - -

(?=[a-zA-Z]{2,5}\d+$).{3,8} entspricht
Ausdruck1Ausdruck2 mit
* Ausdruck1: (?=[a-zA-Z]{2,5}\d+$)
* Ausdruck2: .{3,8}

Ausdruck2 ist klar?

Ausdruck1: (?=[a-zA-Z]{2,5}\d+$) entspricht
Ausdruck3(?=Ausdruck4) mit
* Ausdruck3:
* Ausdruck4: [a-zA-Z]{2,5}\d+$

Ausdruck3 nichts

Ausdruck4: [a-zA-Z]{2,5}\d+$ entspricht
Ausdruck5Ausdruck6Ausdruck7 mit
* Ausdruck5: [a-zA-Z]{2,5}
* Ausdruck6: \d+
* Ausdruck7: $
 
Der Punkt in einem Regex steht für jedes beliebige Zeichen.
Rollen wir das ganze von hinten auf:
.{3,8}
Das bedeutet, dass jeder String erlaubt ist, egal welche Zeichen er enthält und min. 3 Zeichen lang ist und max. 8
(?=[a-zA-Z]{2,5}\d+$)
Das ?=bedeutet, dass die folgende Abfrage vorkommen MUSS
[a-zA-z] ist hoffentlich klar davon zwischen 2 und 5 Zeichen und dann ein oder mehere digits durch das \d+
Damit also alles klappt, zwingst du das Vorkommen deines normalen querys und beschränkst alles zusätzlich auf 8 Zeichen
 
Dies mit einer positive look-ahead assertion zu versuchen ist doch ein guter Ansatz, jedoch muss Stringanfang ^ und Stringende $ noch richtig verarbeitet werden, damit das Muster nicht irgendwo im String gefunden werden kann.
Code:
/^(?=[a-zA-Z]{2,5}\d{1,6}$).{3,8}$/

Die 2 x $ sind kein Tippfehler!

Prüft auf 2-5 Buchstaben, gefolgt von 1-6 Ziffern (am Strigende) und insgesamt aus 3-8 Zeichen bestehend.

LG jspit
 
Dies mit einer positive look-ahead assertion zu versuchen ist doch ein guter Ansatz,
du findest das besser als einen einfachen regexp zu nehmen und im nachgang die stringlänge zu prüfen/abzuschneiden


jedoch muss Stringanfang ^ und Stringende $ noch richtig verarbeitet werden, damit das Muster nicht irgendwo im String gefunden werden kann.
davon ist im op aber überhaupt nicht die rede und gerade wenn du nach dem vorkommen irgendwo im string suchen möchtest versagt der ansatz vollkommen.

Die 2 x $ sind kein Tippfehler!
stringende 2 mal abzuprüfen ist aber unnötig. das innere reicht völlig
 
Hi hesst,

davon ist im op aber überhaupt nicht die rede und gerade wenn du nach dem vorkommen irgendwo im string suchen möchtest versagt der ansatz vollkommen.
Mag sein. Auf die Idee bin ich gar nicht gekommen. Ich lese die Aufgabe so dass der String nicht gesucht sondern validiert werden soll. Aber vielleicht meldet sich Shibb nochmal dazu.

du findest das besser als einen einfachen regexp zu nehmen und im nachgang die stringlänge zu prüfen/abzuschneiden
Dies per string.length zu machen ist schon ok.
Wenn jedoch nach dem Vorkommen irgendwo im String gesucht werden soll ist dies nicht so einfach. Da muss der Substring erstmal extrahiert werden bevor die Länge geprüft werden kann. Beispielstring:
Code:
abc345678901232 etwas text xy56 noch mehr text
abc345678901232 ist zu lang und xy56 sollte gefunden werden.

Ich sehe das mit einen einzigen RegEx zu machen auch etwas als sportliche Herausforderung.
In PHP habe ich Validierungsklassen, die nur einen einzigen RegEx zu Prüfung zulassen. Daher mein Interesse so etwas mit einen einzigen RegEx zu erschlagen.


stringende 2 mal abzuprüfen ist aber unnötig. das innere reicht völlig

War mir relativ sicher, ein Beispiel zu haben, wo das innere allein nicht reicht.
Finde es aber nicht mehr. Mag sein das ich mich da geirrt habe.

LG jspit
 
Aber vielleicht meldet sich Shibb nochmal dazu.
er hat das mit dem stringende selbst eingebaut, also ist das schon ok.


Wenn jedoch nach dem Vorkommen irgendwo im String gesucht werden soll ist dies nicht so einfach. Da muss der Substring erstmal extrahiert werden bevor die Länge geprüft werden kann.
das macht exec ja automatisch

War mir relativ sicher, ein Beispiel zu haben, wo das innere allein nicht reicht.
kann nicht sein
 
Das es nichts gefolgt von etwas heißt, wobei etwas 3 - 8 Zeichen lang ist und etwas (?=Ausdruck) erfüllen muss sehe ich.

Aber das konnte ich nicht annähernd aus den Erklärungen in Wiki lesen. Es müsste dann ietwas stehen wie: "Ausdruck muss auf vorgenannten Ausdruck folgen, wobei Ausdruck durch die Bedingung von (?=Ausdruck) zusätzlich beschrängt wird. Ausdruck(?=Ausdruck)Ausdruck"

Meine Erklärung gefällt mir am Besten :) Vielen Dank an alle die sich an der Diskussion beteiligt haben.
 
Zuletzt bearbeitet:
Meine Erklärung gefällt mir am Besten
die aber nicht stimmt. du gehst nur auf den lookahead ausdruck ein. dieser schaut zwar vorraus, wie der name schon sagt, hat aber mit dem folgenden ausdruck nichts(ok, nur wenig) zu schaffen. der lookahead ausdruck kann/ist ja ganz allgemein nur ein teil eines der folgenden ausdrücke bzw. muss nichtmal in den folgenden ausdrücken enthalten sein bzw enthält diese als teilausdrücke.
string: "aaa bbb ccc 111"
ausdruck: /aaa(?=.*111) bbb/

- - - Aktualisiert - - -

oder noch besser, du brauchst nicht mal einen folgeausdruck
string: "aaa bbb ccc 111"
ausdruck: /aaa(?=.*111)/
 
Zurück
Oben