0

検索語に一致する非常に単純な検索クエリを作成しようとしていますが、完全な単語に一致するため、部分一致は問題外です。

検索する文字列は次のとおりです。

" (This is) my test string "

一致するクエリは次のようになります。

"This is"
"(This is)"
"(This is"
"This is)"
"my test"
"string"

などですが、そうではありません:

"This is my"
"(thi"
"my tes"

これらは部分一致のみであるためです。ここでは LIKE は役に立たないので、REGEXP と単語境界を試しています。

1. SELECT " (This is) my test string " REGEXP "(^|[[:<:]])this is([[:>:]]|$)"; -> 1
2. SELECT " (This is) my test string " REGEXP "(^|[[:<:]])\\(this is\\)([[:>:]]|$)"; -> 0
3. SELECT " This is my test string " REGEXP "(^|[[:<:]])this is([[:>:]]|$)"; -> 1

問題は、pt.2 の境界がスペースをカバーしていないのに、pt.3 のように見えるのはなぜですか? ここで何が欠けていますか?

ありがとう

4

1 に答える 1

0

正規表現の下に記載されているように:

これらのマーカーは、単語の境界を表します。それぞれ、単語の先頭と末尾に一致します。単語は、単語文字が前後にない一連の単語文字です。単語文字は、alnumクラス内の英数字またはアンダースコア ( _) です。

)は単語の文字ではないため、パターン\)[[:>:]]が一致することはありません。[[:>:]]\)、一方、一致します

于 2013-09-28T13:34:18.647 に答える