2016-10-19 2 views
-2

ich einen regulären Ausdruck benötigen eine String zu enthalten:Regex, die eine Zeichenfolge übereinstimmt, die zwei Zeichengruppen eine bestimmte Anzahl von Malen enthalten

  • mindestens 3-mal „ab
  • mindestens 2 mal " cd "

Beispiel passender string:

xyz ab cd -f ab ab _ cd

Ich möchte die regexp in einer MySQL-Abfrage wie folgt verwenden:

SELECT name VON table WHERE name REGEXP ' ... '

Vielen Dank

+0

Haben Sie etwas versucht? Können wir Ihren Code sehen? – Toto

+0

Also, Sie arbeiten an einer Regex für MySQL? Fügen Sie das Tag und Ihre Versuche hinzu. –

+0

Mit MySQL REGEXP, das Lookarounds nicht unterstützt, müssten Sie 'SELECT * FROM meineTabelle WHERE col REGEXP '(. * Ab) {3}' und col REGEXP '(. * Cd) {2}'' –

Antwort

0

Dies zählt th e Anzahl von (nicht überlappend) Vorkommen von 'ab':

SELECT CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, 'ab', 'x')) FROM ... 

Anmerkungen:

  • CHAR_LENGTH Zählungen Zeichen, LENGTH Zählungen Bytes; wahrscheinlich ist diese Unterscheidung nicht relevant.
  • Das Beispiel funktioniert für jede 2-char Suchzeichenkette. Für ein 3-Zeichen ersetzen mit einem 2-Zeichen-Ersatz, etc:

    ... REPLACE(str, '1234567', 'abcdef') ...

  • Statt dessen könnten Sie eine Kluft tun:

    SELECT (CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, 'ab', '')))/ CHAR_LENGTH('ab') FROM ...

anschauen für Reihen mit mindestens 3 Kopien:

SELECT * FROM t 
    WHERE (...) >= 3 
Verwandte Themen