Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[Artikel] Regex-Tutorial
schillerdeluxe
myCSharp.de - Member



Dabei seit:
Beiträge: 141
Herkunft: Österreich

beantworten | zitieren | melden

Hallo, ich habe hier einen Fehler, denk ich zumindest mal:
Zitat
E-Mail-Adresse (ohne Umlaute und ß) (Bsp: [email protected])
^[a-zA-Z0-9_-]{1,}[a-zA-Z0-9_-\.]*[a-zA-Z0-9_-]{1,}@[a-zA-Z0-9_-]{2,}\.[a-z]{2,4}$
[a-zA-Z0-9_-]{1,}[a-zA-Z0-9_-\.]*[a-zA-Z0-9_-]{1,}: Groß-, Kleinbuchstaben, Ziffern, Bodenstrich, Bindestrich als Beginn und als letztes Zeichen vor dem @ erlaubt; zusätzlich zu diesen Zeichen ein Punkt in der Mitte erlaubt (Punkt darf also nicht am Beginn und als letztes Zeichen vor dem @ stehen)
@: @-Zeichen
\.: Punkt als solcher und deshalb escaped
[a-z]{2,4}: für die 2 bis 4 Zeichen lange Toplevel-Domain (Bsp: de, com, info)
(und noch viele andere Lösungen (Microsoft-Lösung (in Microsoft Visual Studio Web Developer 2005 Express Edition): \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*))

wenn ich diese Expression verwenden ("^[a-zA-Z0-9_-]{1,}[a-zA-Z0-9_-\.]*[a-zA-Z0-9_-]{1,}@[a-zA-Z0-9_-]{2,}\.[a-z]{2,4}$") bekomme ich folgende Exception:

"^[a-zA-Z0-9_-]{1,}[a-zA-Z0-9_-\.]*[a-zA-Z0-9_-]{1,}@[a-zA-Z0-9_-]{2,}\.[a-z]{2,4}$" wird analysiert - [x-y]-Bereich in umgekehrter Reihenfolge.

Hab noch nicht wirklich eine Ahnung warum, weil eigentlich sieht das ganze ja recht logisch aus. Sobald ich einen / den Fehler gefunden habe, poste ich diesen.
private Nachricht | Beiträge des Benutzers
schillerdeluxe
myCSharp.de - Member



Dabei seit:
Beiträge: 141
Herkunft: Österreich

beantworten | zitieren | melden

Hab die Ursache gefunden. Ich weiß zwar nich arum, aber der \. hat etwas gestört.

Mittels Workaround hab ich jetzt folgendes:

^[a-zA-Z0-9_-]{1,}[\.a-zA-Z0-9_-]*[a-zA-Z0-9_-]{1,}@[\.a-zA-Z0-9_-]{2,}[a-z]{2,4}$

Ich weiß wirklich nicht warum es eine Rolle spielt, ob der Punkt am Anfang oder am Ende der Aufzählung ist, aber bitte...

Klappt jetzt auch super, weil die Lösung von Microsoft selber, lässt Umlaute durch und deswegen hab ich auf diese Variante zurückgreifen müssen.

mfg
deluxe
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von schillerdeluxe am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo schillerdeluxe,

ob der Punkt am Anfang oder Ende steht oder irgendwo in der Mitte steht, spielt an sich keine Rolle. Der Punkt hat innerhalb von eckigen Klammern nicht mal sein übliche Sonderbedeutung, sondern steht auch ohne Backslash nur für sich selbst, also für einen Punkt und nicht für ein beliebiges Zeichen. Man kann den Backslash also einfach weglassen.

Das eigentlich Problem ist der Bindestrich, der wiederum nur innerhalb von Backslash seine bekannte Sonderbedeutung bekommt, sofern er nicht am Anfang oder am Ende steht. Dadurch, dass du den Punkt an den Anfang gesetzt hast, rückte der Bindestrich ans Ende und verlor seine Sonderbedeutung, was das Problem löste.

herbivore
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

beantworten | zitieren | melden

Perfekt...vielen Dank!
private Nachricht | Beiträge des Benutzers
bloggeroli
myCSharp.de - Member



Dabei seit:
Beiträge: 25

beantworten | zitieren | melden

Sauber, echt gute Arbeit, ich bin beeindruckt! :)

Allerdings finde ich persönlich den Gebrauch des Wortes "Regex" im Text etwas gewöhnungsbedürftig.
Z.b.: 4. Syntax von Regex.
Ich bin jetzt in diesem Gebiet kein Experte, doch diese Formuliering finde ich etwas unschön. Gut, wenn man Regex als Abkürzung für die deutsche Übersetzung "Reguläre Ausdrücke" verwendet, passt's einigermaßen, wenn auch grammatikalisch nicht so ganz.
Klar, ich will nicht allzu pingelig sein, jeder versteht's, vielleicht könntest du am Anfang einen kurzen Hinweis geben (z.B. unter 1, "im folgenden Text steht Regex stellvertretend für 'Reguläre Ausdrücke'" oder so etwas in der Art).
C# Tipps und Tricks: http://csharp-tricks.blogspot.com/
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7509
Herkunft: Waidring

beantworten | zitieren | melden

Hallo bloggeroli,

das steht indirekt ja eh da:
Zitat von webstarg
1. Was ist Regex?
Regex ist die Abkürzung für „Regular Expressions“, zu Deutsch: „Reguläre Ausdrücke“.


mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
thas
myCSharp.de - Member



Dabei seit:
Beiträge: 8

beantworten | zitieren | melden

Hi webstarg!

WOW super Tutorial!
Hat mir sehr geholfen

lg,
Wolfi
private Nachricht | Beiträge des Benutzers
serpiano
myCSharp.de - Member



Dabei seit:
Beiträge: 16

beantworten | zitieren | melden

Hallo webstarg,

vielen Dank für das Tutorial!
Es ist sehr kompakt und und gut verständlich!
Genau das, was ich gebraucht habe.

lg
Serpiano
private Nachricht | Beiträge des Benutzers
Whinyowea
myCSharp.de - Member



Dabei seit:
Beiträge: 59

beantworten | zitieren | melden

Hi,

ich fand das Tutorial sehr gut.

MfG Iwan
Alle haben gesagt es geht nicht, dann kam einer der hat das nicht gehört und hat es gemacht.
private Nachricht | Beiträge des Benutzers
BlackMatrix
myCSharp.de - Member



Dabei seit:
Beiträge: 220

beantworten | zitieren | melden

Du beziehst ja deinen Inhalt auf das .NET Framework, richtig?

Dann sollte das hier abgeändert werden:
Zitat
{,max}: Der voranstehende Ausdruck darf maximal max-mal vorkommen.

Das ist meines Wissens nach so nicht implementiert.

Moderationshinweis von herbivore (27.04.2013 - 09:04:52):

Danke für den Hinweis. Ich habe im den obigen Text dahinter geschrieben, dass dies von .NET nicht unterstützt wird.

private Nachricht | Beiträge des Benutzers
Ace86
myCSharp.de - Member



Dabei seit:
Beiträge: 15

beantworten | zitieren | melden

Hi,

erst einmal vielen Dank für das Tutorial.

Bei den Übungen ist mir bei der Aufgabe 10 (Zahl zwischen -750 und 750) aufgefallen, dass das Pattern aus der Lösung auch -000, -00, -0, 00 und 000 zulässt. Wenn statt
^-?(7[0-4]\d|750|[0-6]?\d{1,2})$ das Pattern
^(0$|-?([1-9]\d?|[1-6]\d{0,2}|7[0-4]\d|750))$ verwendet wird besteht das Problem nicht. Sprich es wird geprüft, ob die Eingabe = 0 oder Minus bzw. kein Zeichen und 1-99 oder 100-699 oder 700-749 oder 750 ist.

Ähnlich ist es bei Aufgabe 11 (dreistellige Zahl von -750 bis 750). Hier funktionieren auch -000 und 000.
Das Problem lässt sich beheben indem aus
^-?(7[0-4]\d|750|[0-6]\d{2})$
^-?(7[0-4]\d|750|[1-6]\d{2})$ wird.

Dann ist mir noch ein Schreibfehler im Abschnitt 4.13 Positive und negative Look arounds aufgefallen:
Lookarounds (auch Assertations genannt) stellen die die Leistungsfähigkeit von

Moderationshinweis von herbivore (13.08.2013 - 08:12:05):

Danke für den Hinweis. Ich habe die drei Punkte im Forum, aber nicht im PDF, korrigiert. Deinen ersten Patternvorschlag habe ich so geändert, dass auf jede der möglichen Zahlen immer nur genau eine der Alternativen matcht und dass -0 weiterhin zulässig ist, wobei letzteres zugegeben Geschmackssache ist.

private Nachricht | Beiträge des Benutzers
EifelYeti
myCSharp.de - Member

Avatar #avatar-3408.jpeg


Dabei seit:
Beiträge: 66
Herkunft: Eifel

beantworten | zitieren | melden

Vielen Dank für das super Tutorial. Immer wenn mir RegEx mal wieder über den Weg läuft zieht es mich hier hin ;)

Um RegEx "spielerisch" zu Lernen kann ich noch RegEx-Golf empfehlen:
http://regex.alf.nu/

Ziel ist es mit möglichts kurzen Statements alle nötigen Ausdrücke zu matchen, und die unnötigen Ausdrücke auszuschließen.
Rekursion
(lat. , die) siehe Rekursion
private Nachricht | Beiträge des Benutzers
shufflekeks
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Hab noch einen Fehler gefunden.

6. Übungen Nr. 6

Ziffer Strich Ziffer Strich Ziffer Strich (Bsp: 1-7-6)
^\d-\d-\d$

Ich denke das letzte Strich ist zuviel, zumindest wenn man dem Beispiel und der Lösung folgt.

Gruß
shufflekeks
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von shufflekeks am .

Moderationshinweis von herbivore (26.08.2014 - 10:21:21):

Danke für den Hinweis. Ich habe das überzählige Auftreten des Wortes "Strich" im Aufgabentitel entfernt. Allerdings wie bisher auch nur im Forum, nicht im PDF.

private Nachricht | Beiträge des Benutzers
sinaed
myCSharp.de - Member



Dabei seit:
Beiträge: 3

beantworten | zitieren | melden

Danke für dieses Bemerkenswerte Regex Tutorial, dank diesen hab ich mir eine Frage gespart und enorm viel Code.

Wirklich gut und verständlich geschrieben, hat keine 5 Minuten gedauert da hatte ich meine Antwort.
private Nachricht | Beiträge des Benutzers