2012-04-02 16 views
1

'^ wall $'、 '\ swall \ s'、 '^ wall'または 'wall $'という名前で商品を検索してください。しかし、それは、上記のobviouslyは動作しません。これまでのところここでMySQL正規表現

SELECT * 
FROM `products` 
WHERE (products.name REGEXP 'wall?[:space]') 
ORDER BY products.updated_at DESC 

を「壁紙」や「ワンダーウォール」のような結果を持つべきではありません。これを行う正しい方法は何でしょうか。

明確な説明のために仕様を更新しました。代わりに、正規表現の使用TRIM(products.name) = 'wall'

+0

仕様が矛盾しています。例えば。 '壁紙'は ''壁 ''と商品を一致させます。あなたが達成しようとしていることをより明確にすることができますか?あなたは '任意の文字列"と一致するようにしようとしていますか? –

+0

それは私が持っている問題です。 「壁紙」は一致してはいけません。それは、最後か前か、正面か終りのいずれかのスペースでなければなりません。 –

答えて

5
SELECT * 
FROM `products` 
WHERE (products.name REGEXP '[[:<:]]wall[[:>:]]') 
ORDER BY products.updated_at DESC 
+0

説明はありますか? –

+1

[[:<:]] and [[:>:]]は、Start of wordとEnd of wordに一致する特殊なメタ文字です。おそらく\ bのように使用されていた可能性がある他の特別なメタキャラクタもあります。 –

2

...質問更新後

\bwall\b正規表現の使用のMySQLの同等(ワード境界):

'[[:<:]]word[[:>:]]' 
+0

の製品名は「壁花」などです。この状態は真ではありません – safarov

+0

私は更新された質問を今参照してください.. – Aprillion

2

は、あなたがこのREGEXP '[[:<:]]wall[[:>:]]'

を試すことができます