正規表現地獄

SQL文をPHPの正規表現関数を使って書き換える。この正規表現がなかなかうまくかけなくてハマッタ。

元のクエリの対象部分はこんな感じ。

hoge LIKE ‘%bar%’ AND fuga LIKE ‘%www%’

お題は、ANDの前の部分( hoge LIKE ‘%bar%’) を捕まえて、以下のようにしたい。もちろんbar や wwwは不定。

(SELECT id FROM xxx WHERE hoge LIKE ‘%bar%’) AND fuga LIKE ‘%www%’

そこで、最初書いたパターンがこれ。

“hoge LIKE ‘%.*%’”

確かに最初はうまく動いているかに見えたんだけど、これだと、最初のお題の文章全体がヒットしちゃうのね。つまり、hoge LIKE ‘% の % から始まって、 www%’ の %までが 「.*」で表現されていることになる。結局お題の文章全体がヒットしてしまい、期待通りではないことが判明。 Continue reading