Matthew: Einzelne Zeichen bei einer Suche ignorieren

Hallo Zusammen,

Ist es möglich per regex bestimmte Zeichen zu deklarieren, welche an beliebiger Stelle zwischen den Daten evtl. enthalten sind, um diese bei einer Suche zu ignorieren (so als würden sie gar nicht existent)?

Beispiel: Suche nach "Apfelwein" und ignoriere dabei "-", so das auch der in den Daten vorhandene "Apfel-Wein" gefunden werden kann.

Gruß Matthew

  1. hallo

    Hallo Zusammen,

    Ist es möglich per regex bestimmte Zeichen zu deklarieren, welche an beliebiger Stelle zwischen den Daten evtl. enthalten sind, um diese bei einer Suche zu ignorieren (so als würden sie gar nicht existent)?

    Beispiel: Suche nach "Apfelwein" und ignoriere dabei "-", so das auch der in den Daten vorhandene "Apfel-Wein" gefunden werden kann.

    Apfel-?wein

    --
    Neu im Forum! Signaturen kann man ausblenden!
    1. Apfel-?wein

      Wenn aber unbekannt ist an welcher Position in den zu durchsuchenden Daten das Zeichen evtl. Vorkommt!? Das Beispiel ist da natürlich etwas unglücklich gewählt, aber es könnte quasi auch "A-pfelwein" oder "Apfelwe-in" vorkommen.

      Es müsste also Heißen: Suche nach "Apfelwein" und ignoriere jegliche eventuelle Vorkommen von "-" an beliebiger Position.

      1. @@Matthew

        Apfel-?wein Wenn aber unbekannt ist an welcher Position in den zu durchsuchenden Daten das Zeichen evtl. Vorkommt!? Das Beispiel ist da natürlich etwas unglücklich gewählt, aber es könnte quasi auch "A-pfelwein" oder "Apfelwe-in" vorkommen.

        Es müsste also Heißen: Suche nach "Apfelwein" und ignoriere jegliche eventuelle Vorkommen von "-" an beliebiger Position.

        A-?p-?f-?e-?l-?w-?e-?i-?n

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
        1. Hallo Gunnar Bittersmann,

          A-?p-?f-?e-?l-?w-?e-?i-?n

          /A-?p-?f-?e-?l-?w-?e-?i-?n/i 😉

          Bis demnächst
          Matthias

          --
          Rosen sind rot.
          1. Schade... hatte gehofft man könnte es eleganter Lösen, indem man das zu ignorierende Zeichen einfach „irgendwie“ vor oder nach dem Suchstring deklariert, um diesen nicht zerlegen zu müssen. 😟

            1. Hello,

              Schade... hatte gehofft man könnte es eleganter Lösen, indem man das zu ignorierende Zeichen einfach „irgendwie“ vor oder nach dem Suchstring deklariert, um diesen nicht zerlegen zu müssen. 😟

              Es ist ja noch schlimmer, als Du denkst ;-)

              Wenn Du die regex-Maschine benutzen willst, kannst Du nicht einfach nur den Suchstring aufbereiten, wie gezeigt, sondern musst auch noch dafür sorgen, dass er keine regex-Steuerzeichen enthält, bzw. musst diese vorher escapen.

              Liebe Grüße
              Tom S.

              --
              Es gibt nichts Gutes, außer man tut es!
              Das Leben selbst ist der Sinn.
      2. Hello,

        Du könntest einen eigenen Algorythmus dafür aufbauen:

        1. stelle alle Vorkommen des unliebsamen Zeichens fest
        2. merke dir die Positionen
        3. entferne dei Zeichen
        4. führe den Stringvergleich durch
        5. merke dir die Positionen
        6. korrigiere die Positionen mit Hilfe der ersten Merkliste
        7. usw.

        Da sich hierbei um lineare Operationen handelt bzw. welche, die der Prozessor bereirs unterstützt (Stringvergleich), sollte das auch sehr schnell ablaufen.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Hallo,

          do-undo Technik? Ist wohl unnötig.

          Wenn es nur ein Zeichen ist - REPLACE(variable, "-", "")) = "Apfelwein" - und wenn Du Besonderheiten wegen Groß- und Kleinschreibung hast, dann ist die Lösung in MYSQL nicht die LOWER() Funktion, sondern die COLLATE Klausel.

          Bei 2 - 3 Zeichen kann man REPLACE schachteln.

          Wenn es viele Zeichen sind, wird es mühsam. Ab MYSQL 8 gibt es REGEX_REPLACE, da kannst Du über eine Regex die zu eliminierenden Zeichen angeben.

          Rolf

          --
          sumpsi - posui - clusi
          1. Hello,

            Hallo,

            do-undo Technik? Ist wohl unnötig.

            Wenn es nur ein Zeichen ist - REPLACE(variable, "-", "")) = "Apfelwein" - und wenn Du Besonderheiten wegen Groß- und Kleinschreibung hast, dann ist die Lösung in MYSQL nicht die LOWER() Funktion, sondern die COLLATE Klausel.

            Bei 2 - 3 Zeichen kann man REPLACE schachteln.

            Wenn es viele Zeichen sind, wird es mühsam. Ab MYSQL 8 gibt es REGEX_REPLACE, da kannst Du über eine Regex die zu eliminierenden Zeichen angeben.

            Das hängt ganz davon ab, was die Suche leisten muss. Wenn auch die Position des Suchtextes im Originaltext gesucht wird (z. B. zum Markieren), dann wird man es so ähnlich lösen können, wie ich beschrieben habe. Regex sind da zu teuer.

            Ich habe auch bewusst erstmal das DBMS rausgelassen, da das auf den eigentlichen Algorythmus keinen wesentlichen Einfluss hat.

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
            1. Hallo TS,

              Algorythmus

              Algorithmus kommt von αριθμός (arithmós = Zahl) und hat nichts mit Rhythmus zu tun.

              Bis demnächst
              Matthias

              --
              Rosen sind rot.
              1. Hallo Matthias

                Algorithmus kommt von αριθμός (arithmós = Zahl) und hat nichts mit Rhythmus zu tun.

                Algorithmus kommt von Abu Dschaʿfar Muhammad ibn Musa al-Chwārizmī, hat aber wirklich nichts mit Rhythmus zu tun. ;-)

                Viele Grüße,

                Orlok

                1. Hallo Orlok,

                  Hallo Matthias

                  Algorithmus kommt von αριθμός (arithmós = Zahl) und hat nichts mit Rhythmus zu tun.

                  Algorithmus kommt von Abu Dschaʿfar Muhammad ibn Musa al-Chwārizmī

                  Ja, sein lateinisierter Name Algorismi ist eine Verballhornung seines Namens angelehnt an αριθμός (arithmós = Zahl).

                  Algorismus

                  Bis demnächst
                  Matthias

                  --
                  Rosen sind rot.
              2. Hello,

                ich wollte Dir doch nur eine Freude bereiten. ;-D

                Liebe Grüße
                Tom S.

                --
                Es gibt nichts Gutes, außer man tut es!
                Das Leben selbst ist der Sinn.
  2. Tach!

    Beispiel: Suche nach "Apfelwein" und ignoriere dabei "-", so das auch der in den Daten vorhandene "Apfel-Wein" gefunden werden kann.

    Ersetze das - oder auch alle anderen ungewünschten Zeichen durch nichts und vergleiche dann mit dem Suchwort.

    Solche Suchen, bei denen erst der Feldinhalt berechnet werden muss, sind aber teuer, weil nicht durch Index abkürzbar.

    dedlfix.

    1. Hallo dedlfix,

      Solche Suchen, bei denen erst der Feldinhalt berechnet werden muss, sind aber teuer, weil nicht durch Index abkürzbar.

      Naja. Man könnte eine generated column verwenden und darauf einen Index legen. Ist unschön, aber wenn man es braucht, dann braucht man es.

      PostgreSQLs indexes on expressions wären da natürlich schöner.

      LG,
      CK