2016-08-09 2 views
1

나는 많은 경로를 가진 데이터베이스를 가지고 있으며 더 적은 것이 아니라 2 레벨 밖에없는 모든 경로를 찾아야합니다.정확히 2 개의 슬래시가있는 문자열을 일치시키는 방법

folder/file.ext하지 folder/folder/folder/file.ext 또는 아무것도 이상

여기 내 생각 엔 정규식을 사용하는 것입니다 :

folder/folder/file.ext 

하지만하지 : 예를 들어, 나는 다음과 같은 구조를 일치하는 문자열을 찾을 것이다 질의를 필요로 정확히 두 슬래시가 일치하는 문자열을 일치 /하지만 표현식을 공식화하는 방법을 알지 못합니다.

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

제 경우에는 2 개의 슬래시를 찾아야하지만 매우 구체적입니다 만 이상적으로이 대답은 3 또는 X 수의 슬래시 또는 문자열에서 반복되는 다른 문자를 찾는 데 유용합니다.

+0

'/ folder/file.txt'은 어떨까요? 그건 두 개의 슬래시가 있지만 단 하나의 dir을 갖지 않습니까? – chris85

+0

어쩌면, 그 경우에는 3 개의 슬래시를 찾을 것입니다. – multimediaxp

답변

6

간단한 방법은 like 사용 정규 표현식으로 이렇게

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

가 까다 롭다. 정규 표현식으로

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

:

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

그래서 비록 아마도 덜 scrutable, 가능하지만 여기에 또 다른 방법이다.

0
WHERE LENGTH(name) = 2 + 
     LENGTH(REPLACE(name, '/', '')) 
관련 문제