Regex erkennt String nicht



  • @wob Ja genau, das ist der Grund, warum ich das so umgesetzt habe 🙂 Nur das eben noch zusätzlich um Einheiten im Kochen gehen, wo es auch unkonventionelle Einheiten gibt wie "Gehäufter Esslöffel". Da ergibt also eine Beschränkung auf eine Länge auch nur wenig Sinn.


  • Mod

    @wob sagte in Regex erkennt String nicht:

    @SeppJ sagte in Regex erkennt String nicht:

    kg|mm|mV|

    das kann ziemlich lang werden, wenn man von Yokto bis Yotta alle Vorsätze unterstützen will. Andererseits sind bei der Si-Basiseinheit "kg" nicht alle Vorsätze üblich.

    Also vermutlich ist es sinnvoll, per Regex nur generell auf ein paar Buchstaben zu testen, also [a-zA-Z]{1,<maxLänge>}. Wobei - was sind denn lange Einheiten? mmHg vielleicht. Aber was ist mit Einheiten wie km/h oder GeV/c^2? (das c2c^2 ist ja hier praktisch gesehen zur Einheit zugehörig!)

    Ich würde es natürlich nicht explizit ausschreiben, sondern Einheiten können registriert werden, und der Ausdruck wird dann autogeneriert. Es ging erst einmal grundsätzlich um die Fragestellung, warum der Threadersteller nicht direkt nach dem sucht, was er finden möchte.



  • @SeppJ sagte in Regex erkennt String nicht:

    Es ging erst einmal grundsätzlich um die Fragestellung, warum der Threadersteller nicht direkt nach dem sucht, was er finden möchte.

    Wenn ich auf drei Seiten hier meine Problemstellung genau hinschreibe, dann kommt als erstes wieder der Link zu "Wie schreibe ich eine Frage". Schreibe ich meine Problemstellung nur komprimiert hin, dann kommen nur halb durchdachte Antworten (was klar ist und verständlich, weil ihr kennt ja nicht meine genauen Anforderungen).

    Zusätzlich wird alles hier halt auch schnell Off topic. Das fällt mir auch schwer - Ich freue mich ja über innovative Vorschläge (Habe ja auch nicht die Weisheit mit Löffeln gefressen), auf der anderen Seite will ich auch mein konkretes Problem zeitnah lösen und nicht erstmal meinen ganzen Lösungsweg wochenlang diskutieren und in Frage gestellt bekommen.



  • @Leon0402 sagte in Regex erkennt String nicht:

    Es geht um Einheiten, die im Bereich Kochen verwendet werden.

    Das müsste klappen dann musst du nicht jede einzelne Möglichkeit aufschreiben.

    ([\w\-]+)(\s+[\w\-]+)*

    Erwartet ein bis mehrere Wörter das - enthalten darf, die Wörter getrennt von jeweils mindestens einem Space. Das Ding kannst du auch leicht erweitern.

    Matcht Ess-Loeffel Oel



  • @eigenartig sagte in Regex erkennt String nicht:

    ([\w-]+)(\s+[\w-]+)*

    Der Grund warum ich das andersrum aufgezogen habe, war, dass ich nicht mit Regex angefangen habe. Ursprünglich wollte ich es für die Datenbank machen und meine erste Idee war mit "like" -> https://stackoverflow.com/questions/4913964/wildcard-characters-sql-only-alphabet-characters

    Ich denke, da musste man das wohl so machen, weil es einfach nicht so mächtig wie regex ist?

    Stimme dir natürlich zu, dass es besser ist, dass Wort direkt zu matchen. Mit Ausnahem von "ä, ö, ü" scheint das zu klappen, vielen Dank!

    Bezüglich den Sonderzeichen von gewissen Sprachen wie "ä, ü, ö", gibt es da einen Weg in Regex das ohne explizites auflisten zu lösen? Weil andere Sprachen haben ja wieder andere "Sonderzeichen", die in normalen Wörtern vorkommen könnnen.


  • Mod

    Wenn deine Implementierung character classes unterstützt, was die meisten tun, dann sollte die Klasse :alpha: auch Umlaute und ähnliches matchen, die von der aktuellen Locale als solches definiert werden. Das ist dann entweder die aktuelle globale Locale (für neue Regexobjekte), oder man kann einer Regex mit imbue eine Locale zuweisen (aber man muss dann danach einen neuen Ausdruck zuweisen!).

    Ob das funktioniert? Theoretisch ja, aber ich habe das noch nie probiert und habe gerade keine Zeit für große praktische Experimente. Locales sind notorisch fummelig und verlangen viel Spezialwissen, das man nirgendwo sonst benötigt. Ich weiß auch spontan keine Standardlocale, die dir "alle latein-basierten Buchstaben" definiert, aber das kann auch meine Unkenntnis sein. Zur Not kann man sich selber Locales definieren. Womit wir wieder bei der Fummeligkeit und dem arkanen Spezialwissen sind, wenn es darum geht, Locales selber zu definieren.

    Aber wenn du Glück hast, macht es direkt was du möchtest, und der zweite Absatz trifft nicht zu. Daher sind ein paar Versuche sicher nicht schädlich.



  • @Leon0402 sagte in Regex erkennt String nicht:

    Der Grund warum ich das andersrum aufgezogen habe, war, dass ich nicht mit Regex angefangen habe. Ursprünglich wollte ich es für die Datenbank machen und meine erste Idee war mit "like" -> https://stackoverflow.com/questions/4913964/wildcard-characters-sql-only-alphabet-characters

    Was für ein SQL verwendest du denn? MySQL hat jedenfalls einen REGEXP Operator.
    https://dev.mysql.com/doc/refman/8.0/en/regexp.html



  • Sqllite. Es gibt dort zwar den REGEXP Operator, allerdings muss man ihn selbst implementieren. Muss ich mal gucken.

    Ansonsten gibt es nur noch den GLOB ... nicht sicher, ob es damit realisierbar wäre



  • @Leon0402 am Besten implementierst du den dann wenn dem so ist. Ansonsten würde ich auch eher die Shell deines Betriebssystems nehmen, weil das damit viel schneller geht und du nicht an solchen Dependencies gebunden bist, die C++ so hergibt, wenn du was auf nem anderen Rechner installieren willst. Also in diesem Fall grep für die Bourne Shell oder Get-Content in der Powershell.


Anmelden zum Antworten