【问题标题】:Special chars in SQL regex - match word boundary with special charsSQL 正则表达式中的特殊字符 - 用特殊字符匹配单词边界
【发布时间】:2016-12-08 22:00:09
【问题描述】:

我有一个创建查询的搜索功能。我的目标是搜索确切的单词,所以如果短语是“hello”,它应该只返回带有“hello”的结果(而不是“xhello”、“helloxx”等)。我的代码如下:

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

它适用于大多数情况,但是 当短语是 f.e. 时问题就开始了'$hello' 或 'helloŁ' 等 - 特殊字符破坏了功能。

有办法处理吗?

【问题讨论】:

  • 您可以检查单词是否出现在字符串的开头/结尾以及是否被空格包围:RLIKE '(^|[[:space:]])word([[:space:]]|$)'
  • Wiktor - 仍然无法正常工作
  • 它怎么不“工作”?见regex101.com/r/dX5aV9/1。它正在工作
  • $hello 匹配 RLIKE '[[:&lt;:]]hello[[:&gt;:]]'helloŁ 失败,因为 Ł 是一个字母。请详细说明您对“单词”是/不是什么的所有规则。

标签: mysql sql regex


【解决方案1】:

试试

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( |$)'

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多