查找包含精确字符串的MySQL记录
我正在做一个项目,需要查找包含精确字符串的记录,或者与精确格式相同的字符串。换句话说,如果字符串是“hello world”,那么可能会说。。。数据库中有10条记录具有此字段值,但该字段可能是以下字段之一:查找包含精确字符串的MySQL记录,mysql,regex,Mysql,Regex,我正在做一个项目,需要查找包含精确字符串的记录,或者与精确格式相同的字符串。换句话说,如果字符串是“hello world”,那么可能会说。。。数据库中有10条记录具有此字段值,但该字段可能是以下字段之一: "1. hello world" "1 hello world" "hello world" "hello world (xyz)" "1. hello world (xyz)" "1 hello world (zyx)" 字符串“hello world”可以是任何字符,但前缀总是以数字开
"1. hello world"
"1 hello world"
"hello world"
"hello world (xyz)"
"1. hello world (xyz)"
"1 hello world (zyx)"
字符串“hello world”可以是任何字符,但前缀总是以数字开头或不存在,后缀总是以括号结尾或不存在
我想我已经用下面的正则表达式破解了它,但这不会返回任何记录:
WHERE fieldname REGEXP '^([0-9]+.*)?[[:<:]]hello world[[:>:]](.*\))?$'
WHERE fieldname REGEXP'^([0-9]+.*)[[::]](.\)?$'
此外,我以前从未使用过[[::]],假设这是一种方法,我不确定如何转义中间的文本,因为这将由PHP生成?文档中说要加倍转义反斜杠,所以我猜mysql\u real\u escape\u string是不够的
和往常一样,任何建议都将不胜感激。试试这个
WHERE fieldname LIKE '%hello world%'
您可以阅读有关“LIKE”的更多信息。您可以尝试将最后一部分
[[:>:]](.*\)?$
更改为备选方案,作为解决方法
^([0-9].*)?[[:<:]]hello world($|[[:>:]].+[)]$)
^([0-9].*)[[::].+[)]$)
如果对转义不确定,请尝试将特殊字符放入字符类
[)]
并转义字符串的动态部分。像“%hello world%”这样的怎么样?很遗憾,查看基本的LIKE还不够,因为我需要排除不遵循此格式的记录。例如,“不同的hello world(xyz)”或“1.hello world 2”可以尝试'^([0-9].*)[[::].+[)]$”
Ohhh,这似乎有效!令人沮丧的是,这种方法似乎比组合一堆相似的方法要慢,但作为对我问题的回答,你已经搞定了,谢谢。请作为答案发布,我会接受。不幸的是,基本的LIKE不够,因为我需要排除不遵循此格式的记录。例如“不同的hello world(xyz)”或“1.hello world 2”,那么您到底想要什么呢?这是可行的,但它太慢了,即使使用索引也是如此。我希望用signle regex搜索代替。。和我期望的完全一样,谢谢。令人恼火的是,一个REGEXP似乎比多个LIKE慢4倍左右,毕竟@Ric您还可以尝试切换第一部分^([0-9].*)?[: