使用[[:<:]] [[:>:]]时,空间是否被视为单词边界?

时间:2013-09-28 13:32:58

标签: mysql regex word word-boundaries

我正在尝试创建一个非常简单的搜索查询,该搜索查询匹配任何搜索字词,但匹配完整字词,因此部分匹配是不可能的,例如。

要查找的字符串是:

" (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中(圆括号被删除后显示差异)?我在这里缺少什么?

由于

1 个答案:

答案 0 :(得分:0)

正如Regular Expressions所述:

  

这些标记代表字边界。它们分别匹配单词的开头和结尾。单词是一系列单词字符,其前面或后面没有单词字符。单词字符是alnum类中的字母数字字符或下划线(_)。

由于) 是一个单词字符,因此模式\)[[:>:]] 永远不会匹配;另一方面,[[:>:]]\) 匹配。