mysql - 如何在 MySQL 中匹配恰好有 2 个斜杠的字符串

标签 mysql sql regex

我有一个包含很多路径的数据库,我需要找到所有只有 2 层的路径,不多也不少。 例如,我需要一个查询来查找匹配以下结构的字符串:

folder/folder/file.ext

但不是:

folder/file.ext 而不是 folder/folder/folder/file.ext 或任何更长的内容

我的猜测是使用 REGEX 并匹配恰好有 2 个斜杠 / 的字符串,但我不知道如何制定表达式,例如:

SELECT `name` FROM `table` WHERE `name` REGEXP '????'

在我的例子中,我需要找到 2 个斜杠并且非常具体,但理想情况下,这个答案对于任何寻找 3 或 X 数量的斜杠或字符串上重复的任何其他字符的人都有用。

最佳答案

最简单的方法是使用like:

where name like '%/%/%' and
      name not like '%/%/%/%'

将此作为正则表达式执行很棘手。但这是另一种方法:

where length(name) - length(replace(name, '/', '')) = 2

作为正则表达式:

where name regexp '^([^/]*[/]){2}[^/]*$'

所以这是可能的,尽管可能不那么容易理解。

关于mysql - 如何在 MySQL 中匹配恰好有 2 个斜杠的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38860454/

相关文章:

sql - 获取 mysql 条目的列

sql - SQLite SQL 中 Left 命令的替换

java - 如何获取正则表达式匹配的组值

python - 使用 '%s' 参数化的 SQL 查询是什么样的?

php - 已经存在的数据查询和绕过php mysql中的新条目

java - 升级到 Hibernate4 和 @ElementCollection 导致无法查找现有数据

php - 正则表达式替换 PHP 中的特殊字符?

python - 是否需要 Negative Look behind?

mysql - 按序列号分组并选择该记录的最新(最后)创建日期

文本文件格式的 SQL 代理作业输出