查找包含完全字符串的MySQL记录

时间:2016-01-09 12:30:09

标签: 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”可以是任何内容,但前缀始终以数字开头或不存在,后缀始终以括号结尾或不存在。

我以为我用以下正则表达式破解了它,但这并没有返回任何记录:

WHERE fieldname REGEXP '^([0-9]+.*)?[[:<:]]hello world[[:>:]](.*\))?$'

另外,我之前从未使用过[[:&lt;:]] [[:&gt;:]],并假设这是要走的路,我不知道如何避开文本,因为这会是PHP生成的?文档说要将转义的反斜杠加倍,所以我猜猜mysql_real_escape_string是不够的......?

像往常一样,任何建议都会受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

试试这个

WHERE fieldname LIKE '%hello world%'

您可以阅读有关“LIKE”here的更多信息。

答案 1 :(得分:0)

您可以尝试将最后一部分[[:>:]](.*\))?$更改为替代方案作为解决方法。

^([0-9].*)?[[:<:]]hello world($|[[:>:]].+[)]$)

SQL Fiddle

如果不确定是否有转义,请尝试将特殊字符放入字符类[)]see this question以转义字符串的动态部分。