2014-01-20 4 views
-1

나는 regexp에 의해 일치하는 파일을 찾는 방법이며 regexp의 그룹도 지원합니다. 마찬가지로 :regexp 그룹 캡처 파일 이름 찾기

[ ['/home/bob/docs/abc.txt', 'bob', 'abc'], ['/home/sue/archive/docs/def.txt', 'sue', 'def'] ] 

가드 이런 식으로 뭔가를 수행합니다

match_files('/home/(*)/**/(*).txt') 

같은 뭔가를 반환합니다. 나는이 특정 정규식과 일치하는 것을 찾고 있지 않다. 오히려 제공 될 수있는 임의의 정규 표현식 입력과 일치 시키십시오.

Dir.glob()는 일반적으로 플랫 배열을 반환하며 그룹을 지원하지 않습니다. DSL을 위해 이런 종류의 것을 지원할 라이브러리 나 기술을 찾으려고합니다.

+0

그래서 무엇을 시도 했습니까? 우리는 당신의 시도를 볼 필요가 있습니다. –

+0

질문에서와 같이 Dir.glob()를 시도했지만 결과가 비어 있습니다. 내가 할 수있는 라이브러리 나 API를 찾아 보았지만 찾을 수 없었습니다. – mahemoff

+1

도서관 위치 요청은 주제에 달렸지 만이 질문에서 "또는 일부 기술"을 묻는 메시지가 나오기 때문에 투표를 통해 공개하도록하겠습니다. –

답변

0

DSL의 경우 이러한 종류의 것을 지원하는 라이브러리 또는 트릭을 찾으려고합니다.

문제를 해결하기 위해 도구 나 라이브러리를 추천하거나 찾도록 요청했기 때문에 문제가 주제와 관련이없는 것처럼 보입니다. 또한

, 귀하의 질문은 유효한 코드 예제를 포함해야한다 :

['/home/bob/docs/abc.txt', 'bob', 'readme'] 

을 나는 질문은 매우 흥미로운 생각 ... 어쨌든

['/home/bob/docs/abc.txt', 'bob', 'abc'] 

을 뜻 같아요,하지만 난 돈 ' 표준 라이브러리로 해결할 수 없다고 생각하지 마십시오.

Dir.glob : 경로 패턴과 일치하는 경우

true를 반환합니다. 패턴은 정규 표현식이 아닙니다. 대신 쉘 파일 이름 globbing과 유사한 규칙을 따릅니다. 다음과 같은 메타 문자가 포함될 수 있습니다 ...

특수 문자를 허용하고, 문자열을 구문 분석하고, 일치 항목을 추출하고, glob을 만든 다음 파일 이름에 일치를 적용하는 것이 합당합니다.

+0

"readme"는 오타였습니다. 문제는 주제에 관한 것입니다. 인용 한 추출물은 라이브러리 또는 "트릭"을 요구합니다. 즉, 어떤 방식 으로든 해결할 것입니다. – mahemoff

0

어때?

regex = %r{/home/([^/]+)/.*/([^/]+).txt} 
`find .`.split.grep(regex).map { |l| l.match(regex) }.map(&:to_a) 

확실히 개선 될 수 있습니다.