2016-08-18 4 views
0

다음과 같은 문제가 있습니다. 나는 폴더와 파일의 경로를 찾고 싶다. 경로 (파일이나 디렉토리)의 마지막 부분에 내 searchstring이 포함되어 있다면 정규 표현식 만 일치해야한다. 예를 들어문자열의 끝이 일치하는 정규식 패턴

:

난에 '안녕'을 검색 할

다음 경로의 :

  1. D : \ 사용자 나에게 \ 문서 \ \ FindFile \ 안녕

  2. \

    D : \ Users \ me \ Documents \ FindFile \ hallo \ bla \

  3. D : \ Users \ me \ Documents \ FindFile \ hallo \ bla \ bla 2 \

  4. D : \ 사용자 나에게 \ 문서 \ \ FindFile \ 안녕하세요 \ D

  5. \ 내부 : \ 사용자 나에게 \ 문서 \ \ FindFile \ 안녕하세요 \ 내부 \ 안녕 NR2

  6. D : \ \ 사용자 나에게 \ 문서 \ \ FindFile \ 안녕하세요 \ 내부 \ 안녕 NR2 \ 아니라 hallo.txt

  7. D : \ 사용자 나에게 \ 문서 \ \ FindFile \로써 안녕

  8. \ D drin 테스트 \ \ \ Users \ me \ Documents \ FindFile \ test \ drin \ hallo 테스트 \

  9. D : \ 사용자 나에게 \ 문서 \ \ FindFile \ 테스트 \ TXT drin \ test_hallo.txt

가 없기 때문에 이제 경로 번호 2, 3, 4가 일치하지 말아

그 안에 'hallo'로 끝납니다. (예를 들어 2는 'bla'로 끝나고 'bla hallo'또는 그 안에 'hallo'가 포함되지 않습니다.)

현재이 정규식으로 이것을 시도하고 있습니다. 그러나 작동하지 않습니다.

여기에서 내가 한 것을 확인할 수 있습니다.라인 2, 3, 4가 강조되지해야합니다 : 는 https://regex101.com/r/eF3cU8/1

+0

오른쪽의 백 슬래시를 자르고 각 문자열을 백 슬래시로 분리하고 마지막 부분 만 테스트하십시오. –

답변

1

당신은 사용할 수 있습니다

^.*hallo(?=\\$|[^\\]+).*$ 

Demo

  • ^ 라인의 시작 앵커 (우리는을 사용하는 m 플래그)
  • .* 임의의 문자 발생 횟수
  • 리터럴 텍스트가 hallo
  • (?=\\$|[^\\]+)는 긍정적 예측이 사항을 확인하기 위해
  • hallo는 다음 문자 중 하나는 줄의 끝에 슬래시 다음에, 또는 더 이상 슬래시의 발생
  • .* 숫자는 줄이없는 모든 문자
  • $ 줄의 끝은
+0

감사합니다! 그건 내 문제가 해결 된 :) – mtzE

1

당신이 말한대로 경우 - 경로의 마지막 부분은 포함 가 만 일치하는 경우 내 검색 문자열 -이 예는 해당 없음을 의미합니다. (9) 중 하나와 일치하지 않아야이 그것을 수행해야합니다 : 그것은 hallo (검색 문자열)과 일치

hallo[^\\]*\\[^\\]*$ 

, 선택적 모든 문자 하지만\ 하였다. 그런 다음 \ 다음 다음 다시 선택적으로는 문자 하지만 \

Check it out here at regex101 하였다.

+0

@ 키이스 홀 이미 내 질문에 대답했다. test_hallo.txt에 'hallo'가 포함되어 있기 때문에 잘못 설명했습니다. 내가 검색하고있는 내용입니다. :)하지만 어쨌든 감사드립니다! – mtzE

관련 문제