1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Community
  3. Smalltalk

Reguläre Ausdrücke

  • seraphim
  • 8. Dezember 2011 um 19:09
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • seraphim
    Punkte
    70
    Beiträge
    12
    • 8. Dezember 2011 um 19:09
    • #1

    Hallöchen,

    ich hätte mal eine Frage. Wir haben diese Aufgabe bekommen:

    Erstellen Sie einen Regulären Ausdruck, der eine gültige Emailadresse erkennt.

    Könnte mir jemand helfen und sagen wie sowas aussieht? Ich habe echt keine Ahnung. Eine dazugehörige Erklärung wäre auch toll.

    Danke schonmal!

  • sutupud
    Punkte
    1.659
    Beiträge
    320
    • 8. Dezember 2011 um 19:39
    • #2

    dazu muss man zuerst mal wissen, was eine "gültige emailadresse" ist. genau steht das in rfc 5322.
    wenn man sich das genaure anschaut wird man sehen, dass es keinen einfachen regulären ausdruck gibt, eine mailadresse zu überprüfen.
    das beste was ich gefunden habe ist das:

    Code
    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])


    quelle: http://www.regular-expressions.info/email.html
    es gibt noch weitere möglichkeiten (google sollte hier helfen)...
    generell gilt bei solchen validierungen: lieber etwas ungültiges zulassen als etwas gültiges ausschließen...

  • seraphim
    Punkte
    70
    Beiträge
    12
    • 8. Dezember 2011 um 19:45
    • #3

    Das ganze ist der reguläre Ausdruck? Weil auf dem Link steht doch nicht so viel...

  • Paulchen
    Gast
    • 8. Dezember 2011 um 20:15
    • #4
    Zitat von seraphim

    Das ganze ist der reguläre Ausdruck? Weil auf dem Link steht doch nicht so viel...

    Vielleicht, weil dein Browser jenen Teil des regulären Ausdrucks, der einen halben Kilometer über den rechten Seitenrand hinaus reicht, nicht anzeigt.

  • seraphim
    Punkte
    70
    Beiträge
    12
    • 8. Dezember 2011 um 20:17
    • #5

    http://www.regular-expressions.info/email.html

    auf der seite steht es in der mitte des textes...woher soll ich denn so ein langen regulären ausdruck ausm kopf wissen als laie?

  • Paulchen
    Gast
    • 8. Dezember 2011 um 20:20
    • #6

    Macht die dir gestellte Aufgabe irgendwelche Einschränkungen, was zum Beispiel die verwendeten Zeichen angeht? Vielleicht ist ja nur ein regulärer Ausdruck gesucht, der zu einer Teilmenge aller zulässigen Mailadressen passt.

  • seraphim
    Punkte
    70
    Beiträge
    12
    • 9. Dezember 2011 um 08:48
    • #7

    nein die aufgabe ist die, die ich rot geschrieben habe, das ist alles

  • sutupud
    Punkte
    1.659
    Beiträge
    320
    • 9. Dezember 2011 um 09:49
    • #8

    wofür ist denn die aufgabe? ich behaupte einfach mal, dass derjenige, der sie erstellt hat, sich nicht bewusst war dass sie so wenig sinn macht.
    wie gesagt, das was eine gültige email-adresse ist, ist im RFC genau beschrieben, und ist viel komplexer als das, was man täglich an adressen so sieht.
    welche der folgenden adressen sind z.b. gültig:

    a) jack.o'neill@stargate.com
    b) "foo@bar!baz#blah..."@example.com
    c) xx...yy@aaa.bbb
    d) asdf.@qwertz.jkl

    Lösung:

    Spoiler anzeigen


    a) apostroph ist gültig
    b) in einem quoted string ist fast alles erlabut, auch mehr als ein @, gültig
    c) geht so nicht, mehrere punkte hintereinander
    d) punkt vor dem @, nicht erlaubt

    wenn man es sich einfach machen will überprüft man einfach, ob die adresse ein @ enthält, vielleicht noch ob davor und dahinter noch etwas anderes steht.
    dann lässt man sicher alle gültigen mailadressen duch - halt auch viele ungültige.
    oder man macht eine einschränkung, z.b. wie auch unter dem link beschrieben:

    Code
    ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$


    erkennt zwar viele ungültige mailadressen (aber nicht alle), eliminiert aber auch viele gültige. die beispiele oben werden z.b. genau verkehrt ausgewertet: a und b werden abgelehnt, während c und d durchgehen.

    ich würde einfach nachfragen, welchen kompromiss man hier eingehen soll.

    Einmal editiert, zuletzt von sutupud (9. Dezember 2011 um 09:55)

  • seraphim
    Punkte
    70
    Beiträge
    12
    • 9. Dezember 2011 um 10:29
    • #9

    wird eine prüfungsaufgabe und der prof ist nicht kooperativ. bin fernstudent für chemie u des is ein grundfach, nur hat er uns nichts beigebracht...wir sind die 1. und die wussten net was sie uns lehren sollen u das fiel ihm vor ein paar tagen ein u kommt mi in der prüfung...denke o hoffe mal, dass die kurze variante zutrifft...

  • seraphim
    Punkte
    70
    Beiträge
    12
    • 13. Dezember 2011 um 09:39
    • #10

    muss ich vor den ausdruck noch das wort grep setzen?

  • sutupud
    Punkte
    1.659
    Beiträge
    320
    • 13. Dezember 2011 um 19:18
    • #11
    Zitat von seraphim

    muss ich vor den ausdruck noch das wort grep setzen?

    wenn du in der command line arbeitest, schon... es gibt viele verschiedene engines für regex, bekannt ist z.b. die integration in perl, aber auch in javascript - was viel verwendet wird...
    in javascript könntest du z.b. sowas machen:

    Code
    rx=/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
    /* 
        ist das selbe wie rx=RegExp("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", "i");
        das "i" steht für ignorecase --> mailadressen sind case-insensitive
    */
    
    
    if (rx.test("validmail@example.com")) {
       alert("it's valid!");
    }


    oder in python:

    PHP
    import re
    if re.match("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", "validmail@example.com", re.I):
        print "it's valid"

    oder eben für grep:

    Code
    $ echo "validmail@example.org" | grep -Ei "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$"
    [COLOR='#FF8C00']validmail@example.org[/COLOR]


    --> gibt als output jede übereinstimmende zeile aus.

    ohne das ^ bzw. $ am anfang und ende würde es reichen, wenn das pattern irgendwo im text vorkommt (ist übrigens bei der langen version von oben so)

    edit: gute referenz für javascript: http://de.selfhtml.org/javascript/objekte/regexp.htm

    4 Mal editiert, zuletzt von sutupud (13. Dezember 2011 um 19:54) aus folgendem Grund: php-tag nix gut für regex - schluckt \

  • seraphim
    Punkte
    70
    Beiträge
    12
    • 13. Dezember 2011 um 19:43
    • #12

    danke euch

  • Maximilian Rupp 29. Dezember 2024 um 15:56

    Hat das Thema aus dem Forum Sonstiges (Archiv) nach Off-Topic verschoben.

Tags

  • reguläre ausdrücke
  1. Datenschutzerklärung
  2. Impressum