2013-05-15 2 views
0

에서 추출 경로 난의 형태로 경로를 추출하고 싶습니다 :REGEX : 문자열

$/서버/첫 번째 수준 폴더/Second_Level_Folder/내 File.extension

여기서 문제는 경로가 있다는 것입니다 그래서 같은 "자유 형식"이메일에 포함 :

안녕하세요,

You can download the file here: 
  • $/Server/First Level 폴더/Second_Level_Folder/My File.extension < - 나를 클릭하십시오!

주어진 문자열에서 RegEx를 사용하여 모든 경로를 추출하고 싶습니다. 이것은 가능한가?

감사합니다.

+3

공구? 언어? – Kent

+0

항상 "<- 클릭 날!"이라고 말합니까? 끝에 또는 때로는 라인의 끝이 다른가요?그렇지 않으면 같은 줄에있는 다른 텍스트와 경로를 구별하는 것이 불가능할 것이라고 생각합니다. – Tharwen

+0

뭔가 [좋아요] (http://regex101.com/r/vW7bR1)가 도움이 될 것입니다 ... – HamZa

답변

5

예, 가능합니다. (\$/.*?\.\S*)은 정상적으로 처리해야합니다.

\$/

.*?

\.\S*가 공백 만 점 아무것도 일치하는 정규 표현식의 다음 부분까지 모든 것을 일치하는 경로 (공간, 탭)의 시작과 일치

그리고 ( 주위의 )은 일치하는 모든 것을 캡처합니다.

편집 : 추가 사용

그냥 경로

(\$/.*?/)[^/]*?\.\S*

그냥 파일 이름을

\$/.*?/([^/]*?\.\S*)

+0

고마워! 그것은 작동합니다! 단지 다음과 같이 "디렉토리"수준까지만 일치 시키려면 어떻게해야합니까? $/Server/First Level Folder/Second_Level_Folder – Ian

+0

그 다음에 파일이 있다고 가정하면'( 다시'(\ $ /. *? /)'는 경로 과 일치하지만'(? : [^ /?) /] *? \. \ S *)'를 사용하여 파일 이름이 일치합니까? : 그룹이 비 캡처로 설정됩니다. 그래서 경로가 아닌 파일 이름을 사용하려면'(? : \ $ /. *? /) ([^ /] *? \. \ S *) ' – B8vrede

+0

(\ $ /. *? /) (? : \ $ /. *? /) ([^ /] *? \. \ S *)가 작동하지 않습니다. http://regexpal.com/을 사용하여 샘플 문자열에 대해 유효성 검사를 시도했습니다. – Ian

1

파일 이름에 [이스케이프 슬래시/마침표가 없음]이 포함되어 있고 파일 경로 공백이 백 슬래시 '\'로 이스케이프되어 있으면이 작업을 계속 수행 할 수 있습니다 (앞뒤 슬래시를 이스케이프 처리했습니다)

경로에 대한 하나의 파일 기본 이름에 대한 한 - Regular expression visualization

Debuggex Demo

(\/.*?\/)((?:[^\/]|\\\/)+?)(?:(?<!\\)\s|$) 

이 두 캡처 그룹을 만듭니다. 테스트 문자열에 이스케이프 처리되지 않은 공백이있는 파일 이름이 있으면 (그림과 같이) B8vrede의 대답에 따라 파일 이름의 마침표를 앵커로 사용해야합니다.