2010-12-30 8 views
2

私はRegexesのリストを持っており、それらの行を正規表現を渡すフィールドで返したいと思っています。とにかく、次のようなものまであります:EJBQL/MySQL RegexesとIN

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

それは正規表現のようには見えませんがEJBQLにまったくので、私は、私はネイティブ(MySQLの)クエリを使用する必要が推測している可能性があります。

答えて

2

正規表現を1つに結合してみませんか?

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

のでregex1 = "^.*foo(.*)bar"regex2 = "baz(.*)frob$"場合、あなたは

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

+1それはまた良いアイデアです。私のアプローチよりも複雑さが少なく、おそらく高速です。 – Tomalak

1

いいえ、これはできません。少なくとも、それはあなたの考え方ではありません。

代わりにこれを実行します。行に正規表現をテーブルに挿入します。その後、クエリ

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

1を取得したい - funnily、私は私のバージョン:) –

+0

@Timよりも、このあまり複雑で見つける:うーん...それは、余分なテーブルを必要とし、クエリを開始する前に行を挿入します。連結された単一の正規表現を使うと、ハウスキーピングが少なくて済みます。 – Tomalak