2010-12-30 7 views
2

Ich habe eine Liste von Regexes und möchte diese Zeilen mit einem Feld, das Regex übergibt. Gibt es trotzdem etwas wie folgt aus:EJBQL/MySQL Regexes und IN

SELECT * FROM Foo as f WHERE f.bar IN ("regex1","regex2"); 

Es ist nicht wie Regexes sieht möglich sind überhaupt in EJBQL so vermute ich, ich eine native (MySQL) Abfrage verwenden.

Antwort

2

Warum nicht die Regexe zu einem kombinieren?

"(?:" + regex1 + ")|(?:" + regex2 + ")" 

Also, wenn regex1 = "^.*foo(.*)bar" und regex2 = "baz(.*)frob$", würden Sie

(?:^.*foo(.*)bar)|(?:baz(.*)frob$) 
+0

+1 Das ist auch eine gute Idee. Weniger kompliziert und wahrscheinlich schneller als mein Ansatz. – Tomalak

1

Nein, das ist nicht möglich. Zumindest nicht so wie du denkst.

Tun Sie dies stattdessen: Fügen Sie die Regexes als Zeilen in eine Tabelle ein. Dann Abfrage

SELECT 
    * 
FROM 
    Foo AS f 
    INNER JOIN Regexes AS re ON f.bar REGEXP re.pattern 
+0

+1 bekommen - funnily, finde ich weniger kompliziert als meine Version :) –

+0

@ Tim: Naja ... es erfordert eine zusätzliche Tabelle und Zeilen einfügen, bevor Sie mit der Abfrage beginnen können. Die Verwendung einer einzelnen verketteten Regex erfordert weniger Aufwand. – Tomalak

Verwandte Themen