2017-09-15 6 views
3

내 문자열 : 일부 서버 안에 여러 웹 사이트를 가지고 있기 때문에 /var/www/domain.com/public_html/foo/bar/folder/another/..PHP 정규식 마지막 발생

나는 단지 공용 폴더를 얻기 위해,이 문자열에서 루트 폴더를 제거하려면. /^(.*?)(www|public_html|public|html)/s

내 실제 결과는 다음과 같습니다 : /domain.com/public_html/foo/bar/folder/another/..

하지만 난 마지막 ocorrence을 제거하고이 같은 somethig에 싶어 :

내 실제 정규 표현식은 /foo/bar/folder/another/..

감사합니다!

+0

어떻게 알지 못했습니까? 정말 고마워요! @ chris85 – Leonardo

+0

패턴을 그대로 유지하고'U '한정자를 추가하면됩니다. 입력 문자열에 줄 바꿈이 없으면's'을 제거하십시오. –

+0

'폭발 '을 사용할 수 없습니까? – Script47

답변

3

당신은 욕심 한정사를 사용하고 대안 슬래시 사이에 동봉되어있는 경우 lookarounds 사용하여 확인해야 다음 lookarounds 소개

/^.*(?<![^\/])(?:www|public(?:_html)?|html)(?![^\/])/ 

을 : 나는이 있는지 확인하기 위해 부정 문자 클래스 부정적인 lookarounds를 사용 슬래시 또는 문자열의 한도를 지정하십시오. 이 방법으로 예를 들어 html은 폴더이며 다른 폴더 이름의 일부가 아닙니다.

쓸모없는 s 한정자를 제거했습니다. 목표가 모두 빈 문자열로 바꾸는 것이므로 캡처 그룹도 제거했습니다.

+0

예! 너 락. 훨씬 나아 졌어, 고마워! – Leonardo

2

?은 욕심쟁이가 아닌 욕심 많은 욕구를 실제로 원하는 것이 아닙니다. 시도 : 마지막 경기까지 계속한다

^(.*)(www|public_html|public|html) 

합니다.

데모 : https://regex101.com/r/v5WbB3/1/