2014-09-28 4 views
0

정규 표현식에서 반복 패턴을 적용하는 방법을 파악하는 데 어려움이 있습니다.정규식의 무한 반복 패턴

foo/../ 
../../ 
bar/../ 
something/../ 
skipthis/../ 
:이 조건의 .*\/ 부로 /foo/../../bar/../something/../results/in/skipthis/ 본다 때문에

$path = '/foo/../../bar/../something/../results/in/skipthis/../this/'; 
$vpath = preg_replace('/(.*\/\.\.\/)/', '/', $path); 

상기 정규식 그러나 다음과 같은 목록을 일치한다 /foo/../../bar/../something/../results/in/skipthis/../ 일치 :

다음 문제를 보여주는 예이다

그리고 그에 따라 교체하십시오. 내가 기대하는 결과에는 슬래시가 없습니다. 모든 결과의 목록입니다. 첫 번째 일치 항목의 시작 부분에서 시작하여 마지막 부분의 끝 부분에서 끝나는 넓은 결과가 아닙니다. 찾은 성냥.

위의 목록은 내가 기대하는 것입니다. 그러나 정규식은 무한한 .*/../과 일치해야합니다.

미리 감사드립니다.

+0

나는 이것을 풀었다고 믿는다.'([\ w \ d \ s \ \ \ \] +?) \/\. \. \ /' –

+0

자신의 대답을 추가하고 올바른 것으로 표시하십시오. 다른 사람들은 그 해결책이 무엇인지 알 수 있습니다.) –

+0

아주 가깝습니다 ... 일치하지 않는 것 같습니다 ./../. 나는 그것이 모든 것을 일치 시키도록 어떤 방법으로 생각할 필요가있다. –

답변

0

.* 대신에 [^/]*을 시도해보십시오. [^/]* 대신 [!/]* 일 수 있습니다.

여기 SED 사용 예이다 :

sed 's,[^/]*/\.\./,/,g' 
foo/../ 
/
../../ 
/
bar/../ 
/
something/../ 
/
skipthis/../ 
/

주마다 - 기타 라인이 입력되고, 나머지 출력된다.

+0

전체 예제를 공유 할 수 있습니까? .. 만약 당신이 내 코멘트를 보면, 당신은 더 이상 사용하지 않을 것입니다 * –