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



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

要查找的字符串是:

" (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 中的边界似乎覆盖空间(删除圆括号显示了差异)?我在这里错过了什么?

谢谢

如正则表达式中所述:

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

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

最新更新