Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Regex Erläuterungen (https://www.delphipraxis.net/216333-regex-erlaeuterungen.html)

Rollo62 19. Dez 2024 09:47

AW: Regex Erläuterungen
 
Es gibt die Named Matched Subexpressions, was aber Delphi meine ich nicht unterstützt.
https://learn.microsoft.com/en-us/do...ar-expressions

Zitat:

Named matched subexpressions

The following grouping construct captures a matched subexpression and lets you access it by name or by number:

(?<name>subexpression)

or:

(?'name'subexpression)
Damit kann man zwar Gruppieren, aber ob es den Status der Gruppen irgendwie zurückgeben kann weiss ich auch nicht.
Das ist vielleicht je nach Implementierung verschieden.

QuickAndDirty 19. Dez 2024 16:39

AW: Regex Erläuterungen
 
Bei aller Liebe
wäre es nicht einfacher
20 Prüfroutinen zu schreiben also 20 Regexen zu programmieren, vor allem da Regexen sich meist sehr schlecht überprüfen lassen, man versteht die ja in der Regel nicht wenn man sie anguckt, sondern nur in dem Moment wo man sie baut.

Ich habe auch den Eindruck dass OP gar nicht so vertraut mit Regexen ist als dass er in einem Monat mit einem Blick auf eine Regex sagen könnte was diese Regex macht.

Rollo62 19. Dez 2024 16:43

AW: Regex Erläuterungen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1544488)
20 Prüfroutinen zu schreiben also 20 Regexen zu programmieren,

Ich verstehe es so, dass er in EINER RegEx die 20 möglichen Fehlerfälle finden möchte.
Aber ja, alle Bedingungen separat in einer Routine oder sogar Klasse zu verpacken wäre sicher sauberer.
Die kann sich dann in aller epischer Breite um EIN RegEx kümmern.

himitsu 19. Dez 2024 16:54

AW: Regex Erläuterungen
 
Zitat:

Zitat von Rollo62 (Beitrag 1544489)
Die kann sich dann in aller epischer Breite um EIN RegEx kümmern.

Kennst du dieses "EINE" RegEx, was ALLES Möglichen erkennen soll, also ob das Eingegebene eine "gramatikalisch" gültige E-Mail-Adresse ergibt. (nicht ob es dieses Mail-Postfach auch wirklich gibt)

Rollo62 19. Dez 2024 17:20

AW: Regex Erläuterungen
 
Also ich denke es geht um die Teile innerhalb einer RegEx, wie z.B. in einer EMail:

Zitat:

RegEx: '^[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]+)*@([a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*\.)+([a-zA-Z]{2,})$';

1. Anfang und Ende des Strings
^: Beginn des Strings. Der Ausdruck prüft ab der ersten Zeichenposition.
$: Ende des Strings. Der gesamte String muss mit dem Muster übereinstimmen.

2. Lokaler Teil der E-Mail (vor dem @)
[_a-zA-Z0-9\-]+:
[ ]: Gibt eine Zeichengruppe an, die erlaubt ist:
_: Unterstrich
a-z: Kleinbuchstaben
A-Z: Großbuchstaben
0-9: Ziffern
\-: Bindestrich (das \ ist erforderlich, weil - sonst als Bereichsoperator interpretiert wird)
+: Mindestens ein Zeichen aus der Gruppe.
(\.[_a-zA-Z0-9\-]+)*:
\.: Ein Punkt (muss mit \ maskiert werden, da der Punkt in RegEx für "jedes Zeichen" steht).
[_a-zA-Z0-9\-]+: Gleiche Zeichen wie oben.
*: Null oder mehr Wiederholungen. Dadurch sind Subdomains im lokalen Teil möglich (z. B. user.name).

3. @-Zeichen
@: Das Literalzeichen @ trennt den lokalen Teil von der Domain.

4. Domainname
([a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*\.)+:
[a-zA-Z0-9]+: Ein oder mehrere Buchstaben oder Ziffern.
(\-[a-zA-Z0-9]+)*:
\-: Ein Bindestrich.
[a-zA-Z0-9]+: Gefolgt von Buchstaben oder Ziffern.
*: Null oder mehr Wiederholungen (Bindestriche sind optional, z. B. my-domain).
\.: Ein Punkt, der die Domainteile trennt.
+: Mindestens ein Domainabschnitt (z. B. example.com, sub.example.com).

5. Top-Level-Domain (TLD)
([a-zA-Z]{2,}):
[a-zA-Z]: Buchstaben.
{2,}: Mindestens zwei Zeichen (z. B. com, org, de).
Wenn der RegEx nicht matched, wie findet man heraus an welcher Stelle genau es gekracht hat, 1 ... 5 ?
Das meine ich, oder geht es doch um etwas Anders?

sko1 20. Dez 2024 10:28

AW: Regex Erläuterungen
 
Genau darum geht es...

Ciao
Stefan

shebang 20. Dez 2024 13:16

AW: Regex Erläuterungen
 
Code:
^
(?:[A-Z]|(.))
(?:[A-Z]|(.))
(?:[0-9]|(.))
(?:[0-9]|(.))
(?:[A-Za-z0-9]|(.)){,12}
$
Die Idee dahinter sind Non-capturing Groups (?: ) für die erlaubten Zeichen und Capturing Groups () für die nicht erlaubten mit einer Oder-Verknüpfung. Das bedeutet alles was in einer Capture Group landet ist ein falsches Zeichen. Die Zeilenumbrüche sind nur für die bessere Lesbarkeit hier im Forum.

QuickAndDirty 20. Dez 2024 14:44

AW: Regex Erläuterungen
 
Zitat:

Zitat von Rollo62 (Beitrag 1544489)
Zitat:

Zitat von QuickAndDirty (Beitrag 1544488)
20 Prüfroutinen zu schreiben also 20 Regexen zu programmieren,

Ich verstehe es so, dass er in EINER RegEx die 20 möglichen Fehlerfälle finden möchte.
Aber ja, alle Bedingungen separat in einer Routine oder sogar Klasse zu verpacken wäre sicher sauberer.
Die kann sich dann in aller epischer Breite um EIN RegEx kümmern.

Ne.
Ich meine statt 20 Suchmuster (oder ein großes) in strings , plus einen Parser und einen Interpreter und oder Compiler für die suchmustersprache (Regex) in das Programm zu integrieren, wäre es nicht wesentlich productiver einfach die 20 Prüfroutinen in Pascal (das ist so eine imperative Programmiersprache mit eigentlich ziemlich guten String utilities) zu schreiben?
Vor allem da OP Pascal anscheinend besser kann als Regexen.

Ich denke Regexen sind eher sinnvoll wenn ein User oder ein Admin sie Konfigurieren kann!
Also wenn ich z.b. den Filter oder Validator in einer Einstelldatei oder in der Software interaktiv festlegen möchte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz