如何匹配MySQL中正好有两个斜杠的字符串
我有一个包含很多路径的数据库,我需要找到所有只有两个级别的路径,而不是更多或更少。 例如,我需要一个查询来查找与以下结构匹配的字符串:如何匹配MySQL中正好有两个斜杠的字符串,mysql,sql,regex,Mysql,Sql,Regex,我有一个包含很多路径的数据库,我需要找到所有只有两个级别的路径,而不是更多或更少。 例如,我需要一个查询来查找与以下结构匹配的字符串: folder/folder/file.ext 但不是: folder/file.ext而不是folder/folder/folder/file.ext或任何更长的 我的猜测是使用正则表达式和匹配字符串,这些字符串正好有两个斜杠/,但我不知道如何表达表达式,比如: SELECT `name` FROM `table` WHERE `name` REGEXP '?
folder/folder/file.ext
但不是:
folder/file.ext
而不是folder/folder/folder/file.ext
或任何更长的
我的猜测是使用正则表达式和匹配字符串,这些字符串正好有两个斜杠/
,但我不知道如何表达表达式,比如:
SELECT `name` FROM `table` WHERE `name` REGEXP '????'
在我的例子中,我需要找到2个斜杠,而且非常具体,但理想情况下,这个答案对于任何寻找3个或X个斜杠或字符串上重复的任何其他字符的人都是有用的。最简单的方法使用
类似的:
where name like '%/%/%' and
name not like '%/%/%/%'
作为正则表达式执行此操作很棘手。但这里有另一种方法:
where length(name) - length(replace(name, '/', '')) = 2
作为正则表达式:
where name regexp '^([^/]*[/]){2}[^/]*$'
因此这是可能的,尽管可能不那么容易检查。最简单的方法使用类似的:
where name like '%/%/%' and
name not like '%/%/%/%'
WHERE LENGTH(name) = 2 +
LENGTH(REPLACE(name, '/', ''))
作为正则表达式执行此操作很棘手。但这里有另一种方法:
where length(name) - length(replace(name, '/', '')) = 2
作为正则表达式:
where name regexp '^([^/]*[/]){2}[^/]*$'
所以这是可能的,尽管可能不那么容易检查。那么/folder/file.txt
呢?它有两个斜杠,但只有一个斜杠,或者你永远不会有前导斜杠?也许,在这种情况下,我会寻找三个斜杠。那么/folder/file.txt
呢?有两个斜杠,但只有一个方向,或者你永远不会有前导斜杠?也许,在这种情况下,我会寻找3个斜杠。
WHERE LENGTH(name) = 2 +
LENGTH(REPLACE(name, '/', ''))