regex搜索字符串中的单词和匹配的单词只能是alnum或numeric

toe95027  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(265)

问题:如果我在where子句中传递任何单词,那么查询应该仅在传递的单词是alnum或num only using mysql regex时返回。
我有一个地址表。

address table 
--------------------
 id    | name
--------------------
  1    | 123 demo
--------------------
  2    | 1st demo
--------------------
  3    | 123
--------------------
  4    | demo

例1

SELECT * FROM address WHERE name regexp '(^|[[:space:]])123([[:space:]]|$)'

结果:第1、3行应返回。对我来说很管用
例2

SELECT * FROM address WHERE name regexp '(^|[[:space:]])1st([[:space:]]|$)'

结果:第2行应返回。对我来说很管用
例3

SELECT * FROM address WHERE name regexp '(^|[[:space:]])demo([[:space:]]|$)'

结果:它不应返回任何行。但它返回1,2,4行
最后:如果我在where子句中传递“demo”,那么就不会返回任何结果。
http://sqlfiddle.com/#!9月8日

2eafrhcq

2eafrhcq1#

我想推荐如下的wordboundary语法: REGEXP '[[:<:]]demo[[:>:]]' http://sqlfiddle.com/#!9/d63e05/1号
老实说,如果这是我的项目,我会做一个 ctype_alnum() 在费心访问数据库之前,先检查一下搜索值。但是,您的要求是:
仅当传递单词是alnum或num only using mysql regex时
要确保查询中的指针字符串至少包含一个数字,请向where子句添加另一个检查。
更具体地说。。。

SELECT * FROM address WHERE address REGEXP '[[:<:]]demo[[:>:]]' AND 'demo' REGEXP '[0-9]'

这将不返回所需的行。

相关问题