我正在尝试创建一个非常简单的搜索查询,该搜索查询匹配任何搜索字词,但匹配完整字词,因此部分匹配是不可能的,例如。
要查找的字符串是:
" (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中(圆括号被删除后显示差异)?我在这里缺少什么?
由于
答案 0 :(得分:0)
正如Regular Expressions所述:
这些标记代表字边界。它们分别匹配单词的开头和结尾。单词是一系列单词字符,其前面或后面没有单词字符。单词字符是
alnum
类中的字母数字字符或下划线(_
)。
由于)
不是一个单词字符,因此模式\)[[:>:]]
永远不会匹配;另一方面,[[:>:]]\)
将匹配。