2016-04-02 16 views
2

Ich möchte ein Regex-Muster für die Überprüfung, ob eine Zeichenfolge hat (a und b) oder (a und c) oder (b und c) in einer MySql REGEXP.Regex Muster für (a und b) oder (a und c) oder (b und c) in mysql REGEXP

Ich schrieb dies aber es did'nt arbeiten:

a&&b|a&&c|b&&c 
(a,b)|(a,c)|(b,c) 

Wie kann ich es tun?

+0

sind a, b, c Zeichen oder Zeichenfolgen? – Reversal

+2

Können Sie einige Beispielzeichenfolgen zusammen mit der erwarteten Ausgabe posten –

Antwort

1

Um Spalte Stringwerte entsprechen, die wenigstens zwei Zeichen aus Sequenz (a and b) or (a and c) or (b and c) verwenden Sie die folgende regexp enthalten:

'a.*b|b.*a|a.*c|c.*a|b.*c|c.*b' 

Beispiel (aus Test-Datenbank):

SELECT id, url FROM `n_categories` 
WHERE url regexp 'a.*b|b.*a|a.*c|c.*a|b.*c|c.*b' 

Die beispielhafte Ausgabe:

enter image description here

+0

Klammern nicht benötigt. – Reversal

+0

@Reversal, behoben, danke – RomanPerekhrest

+0

Hallo RomanPerekrest sehr sehr danke. Ich hoffe auf schöne und gute Dinge. – sara

1

Sie könnten dies nutzen:

a.*(b|c)|b.*(a|c)|c.*(a|b) 

Die variablen Teile mehrere Zeichen lang sein. Hier finden Sie einige Testdaten:

Test mit aa dann bb darin
Test mit bb dann aa darin
Test mit aa dann cc darin
Test mit cc dann aa darin
Test mit bb dann cc darin
Test mit cc dann bb darin
Test mit nur aa darin
Test mit nur bb darin
Test mit nur cc darin
Test mit aa, bb und cc.

Sie diese SQL anwenden könnte es testen:

select txt, 
     CASE WHEN txt regexp 'aa.*(bb|cc)|bb.*(aa|cc)|cc.*(aa|bb)' 
      THEN 'Yes' 
      ELSE 'No' 
     END matches 
from t 

hier ein fiddle, das eine Spalte auf die Testdaten hinzufügt, der angibt, ob eine Übereinstimmung vorhanden ist oder nicht:

|    txt   | matches | 
|----------------------------|---------| 
| test with aa then bb in it | Yes | 
| test with bb then aa in it | Yes | 
| test with aa then cc in it | Yes | 
| test with cc then aa in it | Yes | 
| test with bb then cc in it | Yes | 
| test with cc then bb in it | Yes | 
| test with only aa in it | No | 
| test with only bb in it | No | 
| test with only cc in it | No | 
| test with aa, bb and cc. | Yes | 
+0

Ihre Antworten auch funktioniert. Danke. – sara

Verwandte Themen