查找包含精确字符串的MySQL记录

查找包含精确字符串的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”可以是任何字符,但前缀总是以数字开

我正在做一个项目,需要查找包含精确字符串的记录,或者与精确格式相同的字符串。换句话说,如果字符串是“hello world”,那么可能会说。。。数据库中有10条记录具有此字段值,但该字段可能是以下字段之一:

"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].*)?[: