AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einfache Regex gesucht

Ein Thema von idefix2 · begonnen am 23. Mär 2015 · letzter Beitrag vom 23. Mär 2015
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Einfache Regex gesucht

  Alt 23. Mär 2015, 18:19
Hallo,
ich frage mich gerade, ob es eine einfache Möglicheit gibt, folgenden Check direkt auf der Regexebene durchzuführen, mir fällt dazu aber nichts Gescheites ein:
Ein gültiger Ausdruck besteht aus einem oder mehreren von 4 bestimmten Buchstaben in beliebiger Reihenfolge, das wäre also als Regex z.B. [KJFR]+
aber mit der Einschränkung, dass jeder der 4 Buchstaben höchstens einmal vorkommen darf.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 18:37
Geht, so wie ich das sehe, nur, wenn du alle Permutationen explizit auflistest. Also 'KJFR|KJRF|KRJF|KRFJ|...'
Nicht wirklich sinnvoll
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 18:42
Warum soll es denn unbedingt RegEx sein?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
swkevin08

Registriert seit: 21. Jul 2008
11 Beiträge
 
Delphi XE Professional
 
#4

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 18:48
Machs wie du es auf dem Papier lösen würdest! Bau dir einen endlichen Automaten!
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 18:52
Es muss nicht unbedingt Regex sein. Aber ich verwende Regex, um diesen Teilstring aus einem grösseren String herauszuklauben, und wenn der Check dabei gleich mitgegangen wäre (es geht sicher irgendwie, aber auf eine einfache Lösung bin ich nicht gekommen), wäre es am einfachsten gewesen. Natürlich kann ich die Prüfung auch extra programmieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 18:53
Code:
^[KJFR]{4}$
genau 4
Code:
^[KJFR]{1,4}$
1 bis 4
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Mär 2015 um 19:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 19:09
Geht, so wie ich das sehe, nur, wenn du alle Permutationen explizit auflistest. Also 'KJFR|KJRF|KRJF|KRFJ|...'
Für echte reguläre Ausdrücke hast du vermutlich recht, mit Perl-Style-Regex geht es dank Look-ahead und Back-references
Code:
([abc])(?!\1)([abc])(?!\1|\2)([abc])(?!\1|\2|\3)
Hier kann man testen.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#8

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 19:11
Es ist absolut möglich. Die Sprache, die du beschreiben willst, ist regulär, also ist sie sogar mit der theoretischen Definition von Regulären Ausdrücken beschreibbar.
Abgesehen von der Auflistung aller Worte (Wie von Namenloser beschrieben) ginge evt. das:
Code:
(K?J|J?K)?(FR|RF)? | (K?F|F?K)?(JR|RJ)? | (K?R|R?K)(FJ|JF)? | (F?J|J?F)(KR|RK)? | (J?R|R?J)?(KF|FK)? | (F?R|R?F)?(KJ|JK)?
ist aber weniger leserlich.
Ansonsten, wenn wir von PCREs reden, bin ich sicher dass es eine kompaktere Möglichkeit gibt [edit]siehe Beitrag darüber[/edit].
Allerdings ist das dann wahrscheinlich kaum noch performant. Insb. weil wir von einer endlichen Sprache reden, sind Regexes overkill.
Die Prüfung direkt im Code zu erledigen ist definitiv performanter und leserlicher.


Code:
^[KJFR]{4}$
genau 4
Code:
^[KJFR]{1,4}$
1 bis 4
Erfüllt zwar nicht
aber mit der Einschränkung, dass jeder der 4 Buchstaben höchstens einmal vorkommen darf.
Aber könnte als Vor-Filter für die Auswertung im Code verwendet werden.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#9

AW: Einfache Regex gesucht

  Alt 23. Mär 2015, 20:04
Danke für eure Antworten. Mit dem Ansatz von Bug werde ich wohl weiterkommen (ist noch nicht ganz das, was ich brauche, weil der String darf jeden Buchstaben höchstens einmal enthalten, muss aber nicht alle 4 erlaubten Buchstaben enthalten - aber das zu verändern dürfte jetzt eher einfach sein, ein paar zusätzliche Klammern und Fragezeichen und es sollte passen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz