2016-08-03 20 views
2

私はクエリを作成する検索機能を持っています。私の目標は正確な単語を検索することです。そのフレーズが「こんにちは」の場合、「hello」(「xhello」、「helloxx」などではなく)の結果のみが返されます。私のコードは次のようになります。SQL正規表現の特殊文字 - 特殊文字と単語境界を一致させる

SELECT (...) WHERE x RLIKE '[[:<:]]word[[:>:]]' 

そして、それはほとんどの場合のために動作しますが、フレーズがf.e.とき 問題が開始します'$ hello'や 'helloŁ'など - 特殊文字は機能を損なっています。

これを処理する方法はありますか?

+0

をお試しください文字列の先頭と末尾に耳があり、スペースで囲まれている場合: 'RLIKE '(^ | [[:space:]])word([[:space:]] | $)' ' –

+1

Wiktor - それでも動作しない – user6671488

+0

どのように動作しないのですか? https://regex101.com/r/dX5aV9/1を参照してください。それは*働いています*。 –

答えて

0

は、単語のアプリかどうかをチェックする

SELECT * FROM table WHERE x RLIKE '(^|[[:space:]])Hello([[:space:]]|$)' 

または

SELECT * FROM table WHERE x RLIKE '(^|)Hello(|$)' 

または

SELECT * FROM table WHERE x REGEXP '(^|[[:space:]])Hello([[:space:]]|$)' 

または

SELECT * FROM test WHERE name REGEXP '(^|)Hello(|$)' 
+0

OPにはすでに「動作していない」と記載されています(http://stackoverflow.com/questions/38739216/special-chars-in-sql-regex#comment64853436_38739216)。 –

+0

rlikeとregexpの違いは何ですか? – user6671488

+0

どちらも同じです。 [正規表現](http://dev.mysql.com/doc/refman/5.7/en/regexp.html)を参照してください。 – zakhefron

関連する問題